ios日记

作者: maybeshi | 来源:发表于2017-12-04 09:58 被阅读0次

为什么很多内置类如UITableViewController的delegate属性都是assign而不是retain的?

答:

会引起循环引用

所有的引用计数系统,都存在循环应用的问题。例如下面的引用关系:

  对象a创建并引用到了对象b.

  对象b创建并引用到了对象c.

  对象c创建并引用到了对象b.

  这时候b和c的引用计数分别是2和1。

  当a不再使用b,调用release释放对b的所有权,因为c还引用了b,所以b的引用计数为1,b不会被释放。

  b不释放,c的引用计数就是1,c也不会被释放。从此,b和c永远留在内存中。

  这种情况,必须打断循环引用,通过其他规则来维护引用关系。我们常见的delegate往往是assign方式的属性而不是retain方式 的属性,

  赋值不会增加引用计数,就是为了防止delegation两端产生不必要的循环引用。

  如果一个UITableViewController 对象a通过retain获取了UITableView对象b的所有权,这个UITableView对象b的delegate又是a,

  如果这个delegate是retain方式的,那基本上就没有机会释放这两个对象了。自己在设计使用delegate模式时,也要注意这点。

相关文章

  • 剖析成员变量与属性变量@property/@synthesis/

    iOS中属性与成员变量的区别 iOS开发日记-2014.6.20 成员变量、实例变量、属性之间的关系 在 iOS5...

  • day4 2022-07-31 产品体验:榴莲日记

    榴莲日记app 适用:安卓、ios 图标 主要功能:时间轴的日记 应用商城的产品介绍: vip 需要开通vip(原...

  • Xcode生成API开发文档(headerdoc, doxyge

    主要参考: iOS开发日记23-Xcode生成API文档(HeaderDoc)苹果对HeaderDoc的说明文档 ...

  • APPTalk03:格志

    1.这个产品是干什么的? iOS上颜值最高的九宫格日记应用,通过问题引导式日记帮助人们更好的记录生活,让日记写作变...

  • 开始学习一个新的领域--IOS逆向,记录其中遇到的一些五花八门的问题。 《IOS逆向踩坑日记》。 利己利人。 吱。

  • ios日记

    为什么很多内置类如UITableViewController的delegate属性都是assign而不是retai...

  • ios日记

    可能造成tableView卡顿的原因有: 1.最常用的就是cell的重用, 注册重用标识符 如果不重用cell时,...

  • ios日记

    ios在前台或者后台时在推送字段里添加"content-available" = 1 在app启动时走didRec...

  • 备份人生

    我的笔记其实从Evernote和Onenote之间搬过几个来回,日记也是在simple note,ios note...

  • iOS开发日记-tableviewCell的自适应续(填坑)

    iOS开发日记-tableviewCell的自适应续(填坑) 上一篇tableviewCell的自适应文章中讲了c...

网友评论

      本文标题:ios日记

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