ARC中的didRecieveMemoryWarning(iOS / Obj-C)

时间:2012-05-15 02:03:42

标签: objective-c ios debugging automatic-ref-counting didreceivememorywarning

我有一个使用ARC(自动引用计数)的iOS(Obj-C)项目。根据Apple文档和纯实验,你不能有如下声明:

[UIThingamabob release];

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

中创建IB对象
@property (nonatomic, retain) IBOutlet ...

头文件的一部分。

我一直在使用上述声明(对于我的所有IB项目,使用非原子和保留(或者强 - 它们之间的差异,它们是如何使用的?)属性)。当我在iOS设备上进行测试时,我将随机获取一个UIAlertView(我为调试目的而创建),仅在 didRecieveMemoryWarning 事件被触发时显示。

我的一些BETA测试人员在他们设法退出应用程序之前不停地使用这些视图进行轰炸。

我的问题是,我在didRecieveMemoryWarning事件中放入了什么,因为我无法发布对象?如果没有任何东西可以放在那里,那么由于我使用@property函数创建对象的方式会发生这些错误吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您不应在retain声明中使用@property。 ARC选项为assignweakstrong。有关详细信息,请参阅此处:

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

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

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

答案 2 :(得分:0)

如果没有看到你的项目,就不可能知道该做什么,但你可以做以下事情:

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