美文网首页
@property后面的关键字

@property后面的关键字

作者: maniacRadish | 来源:发表于2016-06-02 16:54 被阅读32次

    @property后面的有以下的属性readwrite,readonly,assign,retain,copy,nonatomic等
    @property是一个属性访问声明,扩号内支持以下几个属性:
    1.1> getter setter
    getter=getterName,setter=setterName,设置setter与getter的方法名
    1.2> weak assign strong copy
    assign 用于非指针变量。用于基础数据类型 (例如NSInteger)和C数据类型(int, float, double, char, 等),另外还有id,其setter方法直接赋值,不进行任何retain操作
    weak 用于指针变量,比assign多了一个功能,当对象消失后自动把指针变成nil,由于消息发送给空对象表示无操作,这样有效的避免了崩溃(野指针),为了解决原类型与循环引用问题
    strong 用于指针变量,setter方法对参数进行release旧值再retain新值
    copy 用于指针变量,setter方法进行copy操作,与retain处理流程一样,先旧值release,再copy出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。copy是在你不希望a和b共享一块内存时会使用到。a和b各自有自己的内存。
    1.3> readwrite,readonly,设置可供访问级别

    1.4> nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。所以约定俗成只在主线程更新UI,防止多线程设置UI属性,出现资源抢夺现象
    **2> 如何避免循环引用 **
    两个对象相互强引用,都无法release,解决办法为一个使用strong,一个使用assign(weak)
    3> delegate的属性为什么使用assign/weak
    避免出现循环引用,场景如UITableViewController强引用视图UITableView,而该视图的代理又是控制器,为避免循环引用,让delegate为弱引用

    相关文章

      网友评论

          本文标题:@property后面的关键字

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