今天遇到了一个问题,给一个数组里面的对象附上值之后,在别的地方取,居然取不出来,最后发现问题是我把一个BOOL类型的属性设成了assign。我当时用了ARC,改成strong还报错。说是普通类型不能设成strong。最后把BOOL类型改成了NSString才解决了。所以恶补了一下有关属性的相关知识。
assign、copy、retain、weak、strong的区别与联系
assign(ARC情况下为weak): 简单赋值,不更改索引计数。用于非指针变量。用于基础数据类型 (例如NSInteger)和C数据类型(int, float, double, char, 等),另外还有id
如:
@property (nonatomic, assign) int number;
@property (nonatomic, assign) id className;//id必须用assign
反正记住:前面不需要加 “*” 的就用assign吧
copy: 建立一个索引计数为1的对象,然后释放旧对象
retain(ARC情况下为strong):释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1.
我的出错的代码是从非ARC项目拷贝过来的,由此来看,只要把assign,设成weak即可。