假设我有一个属性声明为:@property (nonatomic, strong) NSArray *menuArr;
OR @property (strong) NSArray *menuArr;
并将此属性设置为viewDidLoad
。设备会“记住”我存储在数组中的信息多久?
该属性在嵌入在 navigationViewController 中的 viewController 中声明和设置,而 navigationViewController 本身就是 TabBarViewController 中的第一个视图控制器。换句话说,这是用户看到的第一个视图,然后他们可能会离开该视图并返回。
在不讨论原子与非原子的情况下,我的问题是这样的
属性(以任何方式声明)是否在 iOS 环境中无限存在,或者其生命周期受到时间、其他地方的内存使用情况、关闭设备等因素的限制
为了避免这是一个“x y 问题”,我问的是:
我正在开发一个应用程序,其中包含一个分为多个类别的菜单,每个类别中有多个项目......正如您所期望的菜单一样。所有菜单项都存储在 parse.com 上。首先,我在每个页面上执行一个单独的 PFQuery,在类别页面上执行一个以获取类别,当用户选择一个类别时,将推送一个新页面,第二个 PFQuery 获取所选类别中的所有项目。这可行,但页面需要相当长的时间才能加载,有时可能需要 10-15 秒,并且没有真正的迹象表明应用程序并没有冻结。
为了解决这个问题,我决定在加载应用程序的第一个视图时运行一个 PFQueryviewDidLoad
获取所有菜单项并将自己排序到包含项目的类别的嵌套数组中。然后,我将菜单数组存储在 viewController 的属性中。稍后,当我进入菜单时,我会看到以下内容viewDidLoad
:
//get e reference to the first view controller, the one that has the menu array
FirstViewController *myVC1ref = (FirstViewController *)[[[self.navigationController.tabBarController.viewControllers objectAtIndex:0] viewControllers] objectAtIndex:0];
//set thisviewController's `menuArr` property to point to the menuArr on the first viewController.
_menuArr=myVC1ref.menuArr;
我的理解是,这创建了一个指向原始数组的指针,并且实际上并没有创建第二个数组(如果我错了,请纠正我)。
此方法需要大约 10-15 秒来加载和排序数组一次,但之后页面之间的导航是即时的,这要好得多。
我计划在一些地方进行查询,看看是否有任何菜单项已更改,如果是,则重新下载菜单并对其进行排序。
到目前为止,在我的测试中,应用程序似乎全天都能很好地记住数组中的信息,并且正常使用不相关的手机,但这必须有一些限制,对吗?