1 assign、retain、copy区别
assign: 普通赋值,一般用于基本数据类型(包括结构体),常见委托设计模式,以防止循环引用,不会添加索引计数
retain: 保留计数,获得对象所有权。引用计数在原来的基础上+1
copy: 一般用于字符串,Foundation中不可变对象相当于retain,只是引用技术+1
nonatomic:非原子性访问,不加同步,多线程并发会提高性能
2 strong与weak的区别
strong叫强引用,weak叫弱引用,在ARC中,使用strong会告诉编译器自动插入retain,waek相当于手动管理内存的assign
3 _unfase_unretained与weak的区别
功能一致,区别在于当指向的对象销毁后,weak会将变量置为nil,防止调用野指针。
4 readonly的注意
不用readonly的时候,编译器会默认生成setter和getter的声明和实现、_开头的成员变量
如果添加了readonly的属性,编译器会默认生成getter的声明和实现、_开头的成员变量。但如果手动实现了getter方法(例如懒加载),那么编译器就不会再帮自动我们生成getter的实现和_开头的成员变量(但还是会生成self开头的成员变量)。当我们需要用到_成员变量的时候,需要自己初始化,例如_arr = [NSMutableArray array];如此之后,self.arr 和 _arr是一样意义的,指向的内存也一样.