在 iOS 应用程序的生命周期中何时触发 ARC?
When ARC is triggered in the lifecycle of an iOS app?
ARC在iOS中使用,当引用计数为0时会自动释放一个对象。在swift书中的例子中,代码将一些var设置为nil使引用计数为 0。在真正的 iOS 应用程序中,除非对象非常大,否则我可能不会故意将某些内容设置为 nil 来释放内存。
我的问题是,ARC 中的释放会在应用程序的生命周期中何时发生?我正在考虑两种情况:
如果我们从一个 viewcontroller 转到下一个 viewcontroller,第一个 viewcontroller 会自动释放吗?假设我们在下一个viewcontroller.
中不保留副本
如果 iOS 以某种方式杀死了我们的应用程序,说它需要内存或其他东西,它是否只是清除我们应用程序使用的所有内存?或者它将某些东西设置为 nil 并触发 ARC 来完成工作?如果代码中有一些强引用循环,这种情况下会不会有内存泄漏?
据我了解,视图控制器保存在堆栈中,未从堆栈弹出的控制器保留其对象。
强引用循环可能会导致内存泄漏,或者在释放包含该对象的内容后使用比当前需要更多的内存。
- 这里已经回答过了,如果第一个视图控制器 pushes/presents 是另一个控制器,它不会被释放。
- 如果 iOS 终止您的应用程序,您的应用程序占用的所有内存都将被释放。所以接下来当你打开你的应用程序时,它将是一个全新的启动。还有一种叫做内存警告的东西,当设备 运行 内存不足或您的应用程序消耗大量内存时 OS 会发出内存警告。实施
didReceiveMemoryWarning
方法并释放任何未使用的数据或资源。它可以使您的应用免于被 OS. 杀死
ARC在iOS中使用,当引用计数为0时会自动释放一个对象。在swift书中的例子中,代码将一些var设置为nil使引用计数为 0。在真正的 iOS 应用程序中,除非对象非常大,否则我可能不会故意将某些内容设置为 nil 来释放内存。
我的问题是,ARC 中的释放会在应用程序的生命周期中何时发生?我正在考虑两种情况:
如果我们从一个 viewcontroller 转到下一个 viewcontroller,第一个 viewcontroller 会自动释放吗?假设我们在下一个viewcontroller.
中不保留副本
如果 iOS 以某种方式杀死了我们的应用程序,说它需要内存或其他东西,它是否只是清除我们应用程序使用的所有内存?或者它将某些东西设置为 nil 并触发 ARC 来完成工作?如果代码中有一些强引用循环,这种情况下会不会有内存泄漏?
据我了解,视图控制器保存在堆栈中,未从堆栈弹出的控制器保留其对象。
强引用循环可能会导致内存泄漏,或者在释放包含该对象的内容后使用比当前需要更多的内存。
- 这里已经回答过了,如果第一个视图控制器 pushes/presents 是另一个控制器,它不会被释放。
- 如果 iOS 终止您的应用程序,您的应用程序占用的所有内存都将被释放。所以接下来当你打开你的应用程序时,它将是一个全新的启动。还有一种叫做内存警告的东西,当设备 运行 内存不足或您的应用程序消耗大量内存时 OS 会发出内存警告。实施
didReceiveMemoryWarning
方法并释放任何未使用的数据或资源。它可以使您的应用免于被 OS. 杀死