@property是iOS开发中常用的关键字,用来声明成员变量及对应的get和set方法
关键字
线程安全
- nonatomic 非原子性:非线程安全的,多个线程可同时访问
- atomic(默认) 原子性:线程安全的,多线程时只有一个线程可以对其访问。当属性使用atomic时,系统就会给该属性的set方法添加自旋锁来保证同时只能有一个线程对其写入
内存管理
- assigne(默认) 弱引用:当属性为Integer,float,double等基本数据类型时,assign为默认关键字
- retain 强引用:MRC下使用,当属性的数据类型为对象时为默认关键字,被其他变量引用时应用计数+1
- stronge(默认) 强引用:ARC下使用,当属性的数据类型为对象时为默认关键字,引用计数+1
- weak 弱引用:ARC下使用,引用计数不会增加。当对象的引用计数为0被释放时,该属性会被置为nil
- unsafe_unretained 弱引用:与weak一样引用计数不会增加。与weak的区别在于当对象的引用计数为0被释放时,该属0性不会被置为nil
- copy 复制:一般使用cope关键字的有NSString、NSArray、NSDictionary等非可变的数据类型和block,因为当属性的数据类型为NSString、NSArray、NSDictionary等非可变类型时只有使用copy关键字,才会在赋值NSMutableString、NSArray等可变类型会进行深拷贝,防止数据变动;ARC下使用copy和strong关键字的blcok内部引用外部局部变量都会将block复制到堆区
访问控制
- readwrite(默认) 读写:可读写
- readonly 只读:只能读,不能写
- writeonly 只写:只能写,不能读
其他
- getter:指定get方法
- setter:指定set方法