美文网首页
13、@property属性修饰符介绍

13、@property属性修饰符介绍

作者: rebeccaBull | 来源:发表于2019-08-27 21:11 被阅读0次
    1、作用:
    @property int age;
    1) 生成_age
    2) 生成_age的get和set方法的声明 
    3) 实现_age的get和set方法
    
    2、分类:
    1)、 MRC:assign/ retain/ copy/  readwrite、readonly/ nonatomic、atomic  等。
    2)、 ARC:assign/ strong/ weak/ copy/ readwrite、readonly/ nonatomic、atomic  等。
    
    3)、原子性:
    automic:对原子属性加锁,多线程下安全,默认值,低性能,是防止在写未完成的时候 被另外一个线程读取,造成数据错误。
    nonautomic:对原子属性不加锁,多线程下不安全,速度快,高性能
    4)、读写属性:(是否要生成setter方法)
    readWrite:读写属性,生成getter、setter方法,默认值
    readOnly:只读属性,只生成getter方法
    5)、
    weak 表示对对象的弱引用,被weak修饰的对象随时可被系统销毁和回收。
    weak比较常用的地方就是delegate属性的设置。
    用weak修饰弱引用,不会使传入对象的引用计数加1。
    
    Set方法处理:
    assign:直接赋值,默认
    注意:
    MRC 和 ARC 都可以用assign。
    assign下的setter方法:
    -(void)setName :(id)str{
            name = str;
    }
    retain:对对象release旧值,retain新值
    copy:release旧值,copy新值
    
    3、注意
    1)、set和get方法的名称
    修改set和get方法的名称,主要用于布尔类型。因为返回布尔类型的方法名一般以is开头,修改 名称 一般用在布尔类型中的getter。
    @property(nonatomic,assign, setter=abc:,getter=haha)int age
    可以理解为把[p setAge: ]------> [p abc:], [p age] ---------> [p haha];
    2)、assign和weak的区别:
    当它们指向的对象释放以后,weak会被自动设置为nil,而assign不会,所以会导致野指针的出现,可能会导致crash。
    3)、strong和weak的区别:
    strong :表明是一个强引用,相当于MRC下的retain,只要被strong引用的对象就不会被销毁,当所有的强引用消除时,对象的引用计数为0时,对象才会被销毁。
    weak : 表明是一个弱引用,相当于MRC下的assign,不会使对象的引用计数+1。
    4)、两个不同对象相互strong引用对象,会导致循环引用造成对象不能释放,造成内存泄漏。
    

    相关文章

      网友评论

          本文标题:13、@property属性修饰符介绍

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