美文网首页
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

    a创建对象b,b中有C类对象c,所以a对b有一个引用,b对c有一个引用,a.b引用计数分别为1,1。当c.dele...

  • IOS

    一、Delegate为什么要用weak或者assign修饰,不能用strong?说明:weak、assign修饰的...

  • runtime之weak指针的实现

    我们经常写delegate ,修饰有weak指针,而不用assign,这是因为用weak指针不会,在delegat...

  • 需要了解的基础知识点

    一、weak和assign有什么区别 修饰delegate的属性是weak还是assign比较好? 答:assig...

  • iOS开发 Tips 一

    索引 关于MBProgressHUD 关于Block为什么要用copy关键字 delegate为什么要用weak修...

  • ios开发之修饰符copy

    在开发中,我们经常说copy用来修饰block或者nsstring字符串。那么究竟为什么要用copy而不用stro...

  • __weak和__block和__strong的用法(OC)

    注释: __weak:在block代码块里,自身的block去引用自身对象属性就要用到__weak; __stro...

  • assgin和weak区别

    面试必备。 ARC才有weak。 weak只能修饰对象类型,主要用控件及代理,而assign使用于修饰基本类型的。...

  • 2018-03-01

    为什么代理要用weak? 答:因为使用weak是弱引用,外部可以释放对象。指明该对象并不负责保持delegate这...

  • assign、 weak、strong、copy区别

    一、assign与weak的区别 assign主要用来修饰基本的数据类型,weak用来修饰NSObject,两者对...

网友评论

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

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