ios - (非原子、强)属性的生命周期在 iOS 中如何运作?

标签 ios objective-c arrays properties pfquery

假设我有一个属性声明为:@property (nonatomic, Strong) NSArray *menuArr; OR @property (strong) NSArray *menuArr; 并在 viewDidLoad 中设置此属性。设备会“记住”我存储在数组中的信息多久?

该属性在嵌入在 navigationViewController 中的 viewController 中声明和设置,而 navigationViewController 本身就是 TabBarViewController 中的第一个 View Controller 。换句话说,这是用户看到的第一个 View ,然后他们可能会离开该 View 并返回。

在不讨论原子与非原子的情况下,我的问题是这样的

属性(以任何方式声明)是否在 iOS 环境中无限存在,或者其生命周期受到时间、其他地方的内存使用情况、关闭设备等因素的限制


为了避免出现“x y 问题”,我问的原因如下:

我正在开发一个应用程序,其中包含一个分为多个类别的菜单,每个类别中有多个项目......正如您所期望的菜单一样。所有菜单项都存储在 parse.com 上。首先,我在每个页面上执行一个单独的 PFQuery,在类别页面上执行一个以获取类别,当用户选择一个类别时,将推送一个新页面,第二个 PFQuery 获取所选类别中的所有项目。这可行,但页面需要相当长的时间才能加载,有时可能需要 10-15 秒,并且没有真正的迹象表明应用程序并没有卡住。

为了解决这个问题,我决定在 viewDidLoad 中加载应用程序的第一个 View 时运行一个 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 秒来加载和排序数组,但之后页面之间的导航是即时的,这要好得多。

我计划在一些地方进行查询,看看是否有任何菜单项已更改,如果是,则重新下载菜单并对其进行排序。

到目前为止,在我的测试中,应用程序似乎全天都能很好地记住数组中的信息,并且正常使用不相关的手机,但这必须有一些限制,对吗?

最佳答案

只要您的应用正在运行,您的应用的内存空间就会保持有效。系统不会随意释放你的内存。你的应用程序怎么可能有这样的功能?属性的类型和属性在此级别绝对没有相关性。

系统发出的内存不足警告是请求您手动释放不需要的内存。应用程序的内存要么完全与您离开时一样,要么在移动到后台然后终止后变成一张空白的石板。如果您的数据需要在程序退出后继续存在,则需要采取措施将其保存到磁盘并读回。

iOS does have some tricks to preserve and restore your app's state ,但这仍然只适用于已终止的应用程序。

关于ios - (非原子、强)属性的生命周期在 iOS 中如何运作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23977765/

相关文章:

ios - twilio API : how can I play an audio file to both sides of a voice call and not disconnect the call?

ios - Alamofire 4 的状态码

Java 开发人员在 Mac OS 上遇到 Objective-C

ios - 动画自动布局 `leftAnchor` 约束更改

ios - Objective C 上的类别 + 惰性实例化模式

javascript - 如何比较 2 个数组,从数组的匹配中返回键以重写第一个数组中的键

php - php uncompress&unpack给出包含一些(10309中的9个)未定义值的数组

ios - UrbanAirShip 集成在我的项目中。它在 Swift3 中运行不佳

ios - 是否有 CGPath 的替代方法允许计算给定位置的路径上的点?

java - 我怎样才能从这个 Java 程序中得到一个解决方案来解决算法?