@property关键字总结

声明属性关键字分三种类型

原子性
  • atomic:默认值,访问时加锁,访问完解锁其他线程才能修改,是线程安全的;考虑性能iPhone开发中一般不用此值;

  • nonatomic:非线程安全,不能保证多线程环境的安全性,效率高,基本使用此值;

读写
  • readwrite:默认关键字,可读可写,属性set、get方法都有;
  • readonly:只读,属性值不能被外界修改,只有get方法;
  • writeonly:只写,属性值不能被外界读取,只有set方法;
内存管理策略
  • assign:默认值,MRC下可修饰OC对象,表示弱引用,ARC下用来修饰基本数据类型;
  • retain:表示对对象的强引用,对象进行引用计数器+1,ARC下使用strong代替
  • strong:ARC下使用,相当于retain,表示对对象的强引用;
  • copy:只能修饰OC对象,会对赋值的对象进行拷贝。
  • weak:ARC下使用,相当于assign,区别在于属性所指的对象遭到摧毁时,系统会将 weak 修饰的属性对象的指针置为 nil;
  • unsafe_unretained:修饰OC对象,类似weak,表示弱引用,指向对象销毁后可能导致野指针,基本不使用;
扩展
  • @synthesize: 自定义属性对应成员变量的名字
  • @dynamic :告诉系统不要自动生成属性的setter和getter方法(一般要自定义setter和getter方法时使用)
iOS9之后新增的关键字
  • nonnull:不可以为空
  • nullable:可以为空
  • null_resettable:get方法不能为空,set方法可以为空(注意:如果使用null_resettable,必须重写 get 方法或者 set 方法,处理传递的值为空的情况)
  • __null_unspecified:不确定是否为空
  • __kindof:类型为这个类或其子类(例如(nullable __kindof UITableViewCell *)表示返回值可以是UITableViewCell及其子类)

你可能感兴趣的:(@property关键字总结)