美文网首页
属性和修饰符

属性和修饰符

作者: SoDoIt | 来源:发表于2016-12-14 09:02 被阅读9次

    @property
    本质 = ivar (实例变量) + getter (取方法) + setter (存方法)
    “属性”(property)有两大概念:实例变量(ivar)、存取方法(getter + setter)

    @synthesize
    编译器期间,让编译器自动生成getter/setter方法。
    当有自定义的存或取方法时,自定义会屏蔽自动生成该方法

    @dynamic
    告诉编译器,不自动生成getter/setter方法,避免编译期间产生警告
    然后由自己实现存取方法或存取方法在运行时动态创建绑定

    注意:
    在xcode4.4(ios6)之后,系统会自动让编译器生产getter和setter方法,无需手动添加@synthesize

    属性修饰符

    assign:
    简单赋值,不更改引用计数。一般用于基础类型的数据(NSInteger)其在MRC下是默认值。

    copy:会拷贝传入的对象(即创建一个引用计数为1的新对象,但是内容与传入对象相同)并把型的对象赋值给实例变量。常用与NSString,Block

    retain:
    释放旧对象,并使传入的新对象引用计数+1。此属性只能用于NSObject及其子类,而不能用于CoreFoundation。

    strong:
    强引用,类似于retain。要求保留传入的对象,并放弃原有对象。一个对象只要被至少一个强引用指向,则其不会被释放,而当没有强引用指向时则会被释放。其在ARC下是对象类型的默认值。

    weak:
    弱引用,要求不保留传入的属性(既不会使传入的对象引用计数+1)。类似于assign,但与assign不同的是,当它们指向的对象被释放后,weak会被自动置为nil,而assign则不会,所以assign会导致“野指针”的出现,weak可以避免悬空指针。

    unsafe_unretained:
    其实质等同于assign。与weak的区别就是指向的对象如果被释放,其不会被置为nil,而导致悬空指针的出现。它是ARC模式下非对象属性的默认值。

    相关文章

      网友评论

          本文标题:属性和修饰符

          本文链接:https://www.haomeiwen.com/subject/becimttx.html