@property属性默认的关键字都有哪些?其他属性的作用?

作者: heweiming 分类: iOS基础 发布时间: 2017-02-20 23:52

property的属性默认是:readwrite,assign, atomic

属性可以拥有的特质分为四类:

  • 1.原子性---- nonatomic
  • 2.读/写属性 ---- readwrite(读写) readonly(只读)
  • 3.内存管理--- strong weak assign copy retain unsafe_unretained
  • 4.方法名--- getter setter
  • strong:释放旧对象将旧对象的值赋予输入对象,再提高输入对象的索引计数为1,常使用在继承自NSObject的类。

    weak:weak不增加对对象的引用计数,也不持有对象,因此不能决定对象的释放。它比assign多了一个功能,当对象消失后自动把指针变成nil

    assign:简单赋值,不更改索引计数,适用于基础数据类型(NSInteger CGFloat)和C数据类型(int float double char 等)简单数据类型。

    copy:建立一个索引计数为1 的对象然后释放旧对象 对NSString它指出,在赋值时使用传入值的一份拷贝,拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效。

    atomic:和 nonatomic用来决定编译器生成的getter和setter是否为原子操作,atomic 设置成员变量的@property属性时 默认为是atomic 提供线程安全。在多线程环境下,原子操作是必要的否则会引起错误的结果。

    nonatomic:非原子性访问对于属性赋值的时候不加锁,多线程并发访问会提高性能,如果不加此属性则默认是两个访问方法都为原子型事务访问。

    readonly:此标记说明属性是只读的,只会生成setter方法,但是没有getter方法

    readwrite:此标记说明属性会被当成读写的,系统会生成,setter跟getter两个方法,这也是默认的属性

    unsafe_unretained:跟weak类似,声明一个弱引用,但是当引用计数为0时,变量不会自动设置为nil

    getter:指定 get 方法,并需要实现这个方法。必须返回与声明类型相同的变量,没有参数

    setter:指定 set 方法,并需要实现这个方法。带一个与声明类型相同的参数,没有返回值(返回空值)
    注意!当声明为 readonly 的时候,不能指定 set 方法

    如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注