didRecieveMemoryWarning in ARC (iOS / Obj-C)



我有一个使用ARC(自动引用计数(的iOS(Obj-C(项目。根据Apple文档和纯实验,您不能有以下语句:

[UIThingamabob release];

以前,这是在分配或保留项目后释放项目的方法。现在我知道您必须管理如何在

@property (nonatomic, retain) IBOutlet ...

部分。

我一直在为我所有的 IB 项目使用上述语句(具有非原子和保留(或强 - 无论如何有什么区别,它们是如何使用的?(属性(。当我在iOS设备上进行测试时,我将随机获得一个UIAlertView(我为调试目的而创建的(,该视图仅在触发didRecieveMemoryWarning事件时显示。

我的一些 BETA 测试人员不停地受到这些视图的轰炸,直到他们设法退出应用程序。

我的问题是,由于我无法释放对象,我应该在didRecieveMemoryWarning事件中放入什么?如果没有什么可放在那里的,那么这些错误是由于我使用 @property 函数创建对象的方式而发生的吗?

您应该对所有

IBOutlet 使用 @property (nonatomic, weak) IBOutlet...。如果使用强,则视图控制器及其超级视图会保留插座。当视图消失时,视图控制器仍然具有对该出口的引用,该出口不再可见。您可以在-viewDidUnload中将 outlet 属性设置为 nil,或者通过使用弱设置,当视图消失时自动将指针设置为 nil。

不应在 @property 语句中使用 retain。ARC 选项是 assignweakstrong 。有关更多详细信息,请参阅此处:

https://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

特别是,检查属性属性部分!

编辑:感谢您的评论,retainstrong现在似乎都是等价的。

如果不看到您的项目,就不可能知道该做什么,但您可以执行以下操作:

清除以后可以重新生成的数据数组。 清除缓冲区。 将当前未使用的对象设置为 nil(如果未保留在其他地方,则会释放它们(。

最新更新