初级-属性

143 阅读2分钟

@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方法