IOS,ARC,属性:( readwrite,nonatomic)vs(radwrite,retain,nonatomic)

时间:2013-03-29 11:48:49

标签: ios memory-management cocos2d-iphone automatic-ref-counting

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

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

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

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

2 个答案:

答案 0 :(得分:4)

ARC将根据属性声明保留对象,对于需要保留的属性,应使用strong,对于不需要保留的属性,应使用weak

<\ n> 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;

答案 1 :(得分:0)

如果您希望继续使用代码,则只能在所需的特定文件.m上排除ARC:

转到目标&gt;构建阶段&gt;编译来源并选择您的.m文件,双击所选内容的右栏,然后添加-fno-objc-arc,这样您就可以排除ARC所选文件。

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

修改&gt;重构&gt;转换为Objective-C ARC ,然后点击转换为现代Objective-C Sintax

这里是屏幕:

enter image description here 在尝试复制项目之前注意不要总是工作!

希望这能帮到你