我有一个使用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 选项是 assign
、 weak
和 strong
。有关更多详细信息,请参阅此处:
https://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html
特别是,检查属性属性部分!
编辑:感谢您的评论,retain
和strong
现在似乎都是等价的。
如果不看到您的项目,就不可能知道该做什么,但您可以执行以下操作:
清除以后可以重新生成的数据数组。 清除缓冲区。 将当前未使用的对象设置为 nil(如果未保留在其他地方,则会释放它们(。