(非primefaces,强)属性的生命周期如何在iOS中运行?
假设我有一个属性声明为: @property (nonatomic, strong) NSArray *menuArr;
或 @property (strong) NSArray *menuArr;
并在viewDidLoad
设置此属性。 设备“记住”我存储在arrays中的信息需要多长时间?
该属性在viewController中声明和设置,该viewController嵌入在navigationViewController中,该控件本身是TabBarViewController中的第一个视图控制器。 换句话说,它是用户看到的第一个视图,然后它们可以远离它并返回。
没有进入关于primefaces与非primefaces的辩论我的问题就是这个
属性(以任何方式声明)是否在iOS环境中无限生存,或者其寿命受限于诸如时间,其他地方的内存使用,关闭设备等因素
为了避免这是一个“xy问题”,这就是为什么我要问:
我正在开发一个应用程序,其中包括分为多个类别的菜单,每个类别中包含多个项目……正如您可能期望的菜单一样。 所有菜单项都存储在parse.com上。 起初我在每个页面上做一个单独的PFQuery,一个在类别页面上获取类别,当用户选择一个类别时,推送一个新页面,第二个PFQuery获取所选类别中的所有项目。 这有效,但页面加载需要相当长的时间,有时可能需要10-15秒,并没有真正表明应用程序还没有冻结。
为了解决这个问题,我决定在viewDidLoad
加载应用程序的第一个视图时运行一个PFQuery,获取所有菜单项并将自己排序为包含项目的类别的嵌套数组。 然后我将菜单数组存储在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秒来加载和排序一次数组,但之后页面之间的导航是在此之后立即更好。
我计划在某些地方进行查询以查看是否有任何菜单项已更改,如果是,则重新下载并对菜单进行排序。
到目前为止,在我的测试中,应用程序似乎记得arrays中的信息一整天都很好,正常无关的手机使用情况但是必须有一些限制吗?
只要您的应用程序正在运行,您应用的内存空间就会一直有效。 系统不会随意从你身下释放内存。 你的应用程序怎么可能这样运作? 该属性的类型和属性在此级别上绝对没有相关性。
来自系统的低内存警告是您手动释放不需要的内存的请求。 应用程序的内存将完全与您离开时一样,或者在移动到后台然后被终止后,将显示空白。 如果您的数据需要在程序退出时继续存在,则需要进行设置以将其保存到磁盘并将其读回。
iOS 确实有一些技巧来保存和恢复应用程序的状态 ,但这仍然只适用于已终止的应用程序。