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

2024-01-08

假设我有一个属性声明为:@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 秒来加载和排序数组一次,但之后页面之间的导航是即时的,这要好得多。

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

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


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

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

iOS 确实有一些技巧来保存和恢复应用程序的状态 https://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/StatePreservation/StatePreservation.html#//apple_ref/doc/uid/TP40007072-CH11-SW5,但这仍然仅适用于已终止的应用程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(非原子、强)属性的生命周期在 iOS 中如何运作? 的相关文章

随机推荐

  • 下拉菜单填充相同的列表项

    我有一个 Gridview 其中有两个下拉列表模板字段 我在运行时将它们绑定到相同的列表项 li new listitem 1 1 dl1 items add li dl2 items add li li new listitem 2 2
  • 如何将 Windows cmd stdout 和 stderr 重定向到单个文件?

    我正在尝试重定向 a 的所有输出 stdout stderr Windows命令 https learn microsoft com en us windows server administration windows commands
  • Django:如何聚合/注释多对多关系?

    我有一个 Person 模型和一个 Tag 模型 它们之间有一个 m2m 我需要提取与给定人员查询集中最多记录相关的标签以及计数 有没有一种优雅 有效的方法来使用 Django ORM 提取它 更好的是 有没有办法通过一些注释来获取整个标签
  • 如何确定 Google Play 服务的版本?

    我正在从 Eclipse 迁移到 Android Studio 我有一个导入到 Android Studio 中的项目 该项目使用 Google Play 服务 因此我遵循在这里找到的文档 http developer android co
  • 清除 NSTableView 内容

    我有一个NSTableView里面充满了来自程序的数据 我有一个重置按钮 除了用于程序的其他部分之外 should清除NSTableView的数据 但是 我完全不知道该怎么做 我还在学习 Obj C 您可以通过调用从 NSTableView
  • Observable 终于订阅了

    根据本文 http paqmind com posts rxjs error and completed events demystified onComplete and onError的功能subscribe是互斥的 意思是要么onEr
  • 如何在rails中的text_area_tag中插入占位符文本?

    我正在使用以下代码来生成textarea tag 渲染后 它会生成以下 HTML
  • Excel 文件 - 它已被其他用户以独占方式打开,

    我正在使用 C 读取 excel 文件 下面是按预期工作的代码 除了每次运行应用程序时 我都必须关闭 excel 文件 否则我会收到以下错误消息 The Microsoft Access database engine cannot ope
  • 在 Cocoa Touch 中以编程方式切换视图

    如何在 iPhone 应用程序中以编程方式更改屏幕视图 我已经能够创建导航视图并以编程方式推送 弹出它们以产生此行为 但如果我想简单地更改当前视图 不使用 UINavigation 控制器对象 那么实现此目的的最简洁方法是什么 一个简单的示
  • 如何让函数 [a] -> [a] 对 [(a,Int)] 进行操作?

    我发现自己经常按照以下模式编写代码 foo xs map snd filter lt 10 fst zip xs 0 bar ys map snd sortBy compare on fst zip ys 0 现在我想把它抽象出来 foo
  • Kubernetes:如何获取运行超过 3 天的命名空间?

    示例 我想获取所有运行超过 3 天的命名空间 我已经借助此命令按标签和创建时间戳对命名空间进行了排序 kubectl get 命名空间 l Provisioner foo sort by metadata creationTimestamp
  • 如何在不同的命名空间上使用 nginx 入口 TCP 服务[重复]

    这个问题在这里已经有答案了 我在 kubernetes 集群中部署了两个命名空间 命名空间 A 主机 mysql 和命名空间 B 运行 postgress 并在这些端口上公开其服务部署 Namespace A mysql port 3306
  • JScrollPane 垂直滚动条太宽

    我正在使用 Netbeans GUI Builder 创建 GUI 应用程序 因此生成的所有代码都是由 Netbeans 生成的 预览设计中的一切看起来都很好 但是当我运行应用程序时 JScrollPane 显示得很糟糕 如您所见 只有一半
  • 在VB6中将十六进制值转换为十进制值

    在VB6中如何将十六进制值转换为十进制值 我只是想看看这是否有效 Dim hexVal as string hexVal 7B19AB clng H hexVal 然而 我得到 类型不匹配 error 去掉 号 Dim hexVal as
  • CSS 中的美女图标形状

    如何仅在 CSS 中绘制此 Belle 图标形状 我已经尝试过方形元素上的边框半径 但没有得到确切的角 那么 为了达到准确的效果 即使我们使用百分比 我们也不能依赖单个元素border radius 因此 一种选择可能是使用两个彼此重叠的
  • D3 js图中相同颜色的箭头和链接

    我是 D3 的新手 一直在尝试使箭头的颜色与 D3 图中箭头的颜色相同 参考给出的代码解决方案here https stackoverflow com questions 32964457 match arrowhead color to
  • OpenAI API:尽管 GPT-3.5 模型可以工作,但为什么我无法通过 API 访问 GPT-4 模型?

    我可以使用 gpt 3 5 turbo 0301 模型访问 ChatGPT API 但不能使用任何 gpt 4 模型 这是我用来测试这个的代码 它不包括我的 openai API 密钥 代码按编写的方式运行 但是当我用 gpt 4 gpt
  • 如何与 Web XML/JSON API 交互?

    我正在自己学习 php xml json 和其他所有内容 并且我正在通过 API 来完成某些事情 他们有文档 但我仍然不明白 API 是如何工作的 他们给你一个 GET 链接和 API 密钥 我知道你应该将 API 密钥放在请求链接中 我如
  • 在 JetBrains PyCharm 中禁用 SQL 检测

    我试图输入以下行 self label QtGui QLabel Select parameter from selected category PyCharm 认为我正在执行 SQL 查询或其他操作 并给出了有关未配置数据连接的错误 字符
  • (非原子、强)属性的生命周期在 iOS 中如何运作?

    假设我有一个属性声明为 property nonatomic strong NSArray menuArr OR property strong NSArray menuArr 并将此属性设置为viewDidLoad 设备会 记住 我存储在