美文网首页
weak和assign有什么区别

weak和assign有什么区别

作者: 奕十八 | 来源:发表于2016-08-26 12:05 被阅读149次

    weak和assign有什么区别

    • 在ARC中,在有可能出现循环引用的时候,往往要通过让其中一端使用weak来解决,比如:delegate代理属性,代理属性也可使用assign,
      自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用weak,自定义IBOutlet控件属性一般也使用weak;当然,也可以使用strong,但是建议使用weak
    • weak策略在属性所指的对象遭到摧毁时,系统会将weak修饰的属性对象的指针指向nil,在OC给nil发消息是不会有什么问题的;如果使用assign策略在属性所指的对象遭到摧毁时,属性对象指针还指向原来的对象,由于对象已经被销毁,这时候就产生了野指针,如果这时候在给此对象发送消息,很容造成程序奔溃
    • assign 可以用于修饰非OC对象,而weak必须用于OC对象
    • unowned : 和OC中的__unsafe_unretained.当对象销毁时依然指向原来的位置(容易引起野指针)
      unowned不支持可选类型

    相关文章

      网友评论

          本文标题:weak和assign有什么区别

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