0

我已经阅读了一些关于 ARC 的教程,但对属性声明仍然有些困惑。我使用以下模式编写了大部分代码:

@property (readwrite, nonatomic) PlayerData* playerData;
@property (readwrite, nonatomic) MusicLayer* musicLayer;
@property (readwrite, nonatomic) bool isPowerUpAvailable;

现在我终于开始处理内存泄漏了,XCode 建议我在一些代码中应该在属性声明中添加“retain”关键字。

使用 ARC,我认为我不应该再“打扰”保留计数了。是否有一些我没有得到或缺少的概念?任何教程参考或解释将不胜感激。

4

2 回答 2

4

ARC 将根据属性声明保留对象,您应该将strong其用于需要保留weak的属性和不需要保留的属性。

weak当对象被释放时,属性也会被取消。

编译器将始终假定属性是readwrite,因此不需要以这种方式声明。

@property (strong, nonatomic) PlayerData* playerData;
@property (strong, nonatomic) MusicLayer* musicLayer;
// Need use assign since strong is for objects only.
@property (assign, nonatomic) bool isPowerUpAvailable;
于 2013-03-29T11:53:32.970 回答
0

如果您希望继续使用您的代码,您可以仅在.m您想要的特定文件上排除 ARC:

转到Targets > Build Phases > Compile Sources并选择您的.m文件,双击选择的右列并添加-fno-objc-arc,以便您仅排除ARC选定的文件。

或者,如果您想使用 ARC 将所有应用程序转换为新代码,请在备份您的项目后,转到:

编辑 > 重构 > 转换为 Objective-C ARC并在此之后执行相同操作,但单击转换为现代 Objective-C Sintax

这里是屏幕:

在此处输入图像描述 注意不要总是在尝试复制您的项目之前工作!

希望这对你有帮助

于 2013-06-30T11:35:27.987 回答