1

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

[UIThingamabob release];

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

@property (nonatomic, retain) IBOutlet ...

头文件的一部分。

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

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

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

4

3 回答 3

3

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

于 2012-05-15T02:49:15.033 回答
1

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

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

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

编辑:感谢您的评论,两者retain现在strong似乎都是等价的。

于 2012-05-15T02:26:29.370 回答
0

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

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

于 2012-05-15T02:39:55.123 回答