美文网首页
delegate为什么要用weak或者assign而不用stro

delegate为什么要用weak或者assign而不用stro

作者: VincentHK | 来源:发表于2017-08-29 11:56 被阅读0次

    a创建对象b,b中有C类对象c,所以a对b有一个引用,b对c有一个引用,a.b引用计数分别为1,1。当c.delegate = b的时候,实则是对b有了一个引用,如果此时c的delegate用strong修饰则会对b的值内存引用计数+1,b引用计数为2。当a的生命周期结束,随之释放对b的引用,b的引用计数变为1,导致b不能释放,b不能释放又导致b对c的引用不能释放,c引用计数还是为1,这样就造成了b和c一直留在了内存中。

    而要解决这个问题就是使用weak或者assign修饰delegate,这样虽然会有c仍然会对b有一个引用,但是引用是弱引用,当a生命周期结束的时候,b的引用计数变为0,b释放后随之c的引用消失,c引用计数变为0,释放。

    相关文章

      网友评论

          本文标题:delegate为什么要用weak或者assign而不用stro

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