下表是属性、所有权和关键字间的关系:
属性 | 关键字 | 所有权 |
---|---|---|
strong | _strong | 有 |
weak | _weak | 无 |
copy | _strong | 有 |
assign | _unsafe_unretained | 无 |
retain | _strong | 有 |
unsafe_unretained | _unsafe_unretained | 无 |
从上表我们可以总结如下:
1、strong,copy,retain都是对象的持有者,copy是拷贝对象的持有者。
2、assign针对基本类型属性声明,不改变属性的引用计数。
3、copy针对字符串类型属性声明
4、strong针对对象属性声明
5、delegate、outlet属性声明使用weak,delegate可以防止循环引用。
6、weak不会改变对象的引用计数,不是对象的持有者。当对象销毁后,weak类型属性自动赋值为nil。
7、关键字用在声明变量的时候,说明变量对对象的所有权。