[英]didRecieveMemoryWarning in ARC (iOS / Obj-C)
我有一个使用ARC(自动引用计数)的iOS(Obj-C)项目。 根据Apple文档和纯实验,您不能有如下声明:
[UIThingamabob release];
这是以前在分配或保留后释放项目的方法。 现在我知道你必须管理如何在中创建IB对象
@property (nonatomic, retain) IBOutlet ...
头文件的一部分。
我一直在使用上面的语句(对于我的所有IB项目,使用非原子和保留(或者强 - 它们之间有什么不同,它们是如何使用的?)属性)。 当我在iOS设备上进行测试时,我将随机获取一个UIAlertView(我为调试目的创建),仅在触发didRecieveMemoryWarning事件时显示。
我的一些BETA测试人员不断受到这些视图的轰炸,直到他们设法退出应用程序。
我的问题是, 由于我无法释放对象 , 我在didRecieveMemoryWarning事件中放了什么? 如果没有任何东西要放在那里,那么由于我用@property函数创建对象的方式会发生这些错误吗?
您应该为所有@property (nonatomic, weak) IBOutlet...
使用@property (nonatomic, weak) IBOutlet...
如果使用strong,则视口控制器和超级视图将保留插座。 当视图消失时,视图控制器仍然具有对该出口不再可见的引用。 您可以在-viewDidUnload
中将outlet属性设置为nil,或者使用弱设置,当视图消失时,指针将自动完成。
您不应该在@property
语句中使用retain
。 ARC选项assign
, weak
和strong
。 有关详细信息,请参阅此处:
特别是,检查属性属性上的部分!
编辑:感谢您的评论, retain
和strong
似乎现在相同。
如果没有看到你的项目,就不可能知道该做什么,但你可以这样做:
清除可以在以后重新生成的数据数组。 清除缓冲区。 将当前未使用的对象设置为nil(如果它们未在其他地方保留,则将释放它们)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.