assign、copy、retain、weak、strong的区别与联系

来源:互联网 发布:python基础教程 微盘 编辑:程序博客网 时间:2024/04/28 22:06

        今天遇到了一个问题,给一个数组里面的对象附上值之后,在别的地方取,居然取不出来,最后发现问题是我把一个BOOL类型的属性设成了assign。我当时用了ARC,改成strong还报错。说是普通类型不能设成strong。最后把BOOL类型改成了NSString才解决了。所以恶补了一下有关属性的相关知识。

   assign、copy、retain、weak、strong的区别与联系

   assignARC情况下为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即可。   
0 0
原创粉丝点击