Nic*_*ard 15 xcode warnings ios automatic-ref-counting
我刚刚将我的应用程序转换为ARC,并且在构建正常的时候,我得到600个警告,所有这些都与我的属性有关.如:
默认属性属性'assign'不适合非gc对象
未指定"assign","retain"或"copy"属性 - 假定为"assign"
在Xcode转换我的代码之后,这是我的属性的样子:
@property (nonatomic) EKEventStore *eventStore;
@property (nonatomic) EKCalendar *defaultCalendar;
@property (nonatomic) UIActionSheet *currentActionSheet;
@property (nonatomic) UILabel *noEventLabel;
Run Code Online (Sandbox Code Playgroud)
有人谈到需要添加strong所有这些.是这样的吗?Xcode忘了添加一些东西吗?
mat*_*att 20
ARC是对的.你不能没有记忆管理资格; 你必须说分配,保留(或强大,这是相同的东西),或弱.
以前,assign是默认值.但这可能不是你想要的,因为它是最糟糕的选择 - 它是一种旧式的非ARC弱引用.您要么需要一个智能ARC弱引用(当对象不存在时转到nil)或强引用(由ARC为您管理内存).
很抱歉添加第二个答案,但事实证明这比我想象的要复杂得多.事实证明你在Xcode 4.3中看到了改变的行为(也许是一个错误?).
在Xcode 4.2,转换器会提供改(nonatomic, retain)到(nonatomic, strong).但是在Xcode 4.3中,它提供了将其更改为(nonatomic); 我想,如果你不希望出现这种情况,换retain到strong是给你转换之前.
另一方面,在Xcode 4.2中,(nonatomic)单独对于合成属性是绝对非法的; 在Xcode 4.3中,它不是:你得到一个警告,但它假设你的意思assign,所以它不是非法的.
因此,ARC在LLVM 3.1中的工作方式发生了变化,并且伴随着Xcode 4.3 ARC转换器的变化.
| 归档时间: |
|
| 查看次数: |
10738 次 |
| 最近记录: |