繁体   English   中英

ARC中的didRecieveMemoryWarning(iOS / Obj-C)

[英]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选项assignweakstrong 有关详细信息,请参阅此处:

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

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

编辑:感谢您的评论, retainstrong似乎现在相同。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM