1.常用的有哪些?
- NSString、NSArray、NSDictionary等等经常使用copy关键字. NSMutableString、NSMutableArray、NSMutableDictionary等等用strong关键字.
- block也常常使用copy关键字,可见官方文档Objects Use Properties to Keep Track of Blocks
- Delegte代理用weak关键字修饰.
- 声明UI控件属性用strong关键字修饰.
6 IBOutlet 默认是用weak关键字修饰.
2.问题剖析:
对于assing:等同于unsafe unretain, 也有weak的功效, 速度比weak稍微快一点。但是assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针;而weak一旦不进行使用后,有置空操作,就不会产生野指针。而且assigin 可以用非OC对象,而weak必须用于OC对象.
weak: 底层使用hash存储,value为所有弱引用的地址,当对象被释放,会将value中所有的地址对象都设为nil, OC访问一个nil对象不会造成carsh. weak 此特质表明该属性定义了一种“非拥有关系” (nonowning relationship)。为这种属性设置新值时,设置方法既不保留新值,也不释放旧值。然而在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。