runtime 如何实现 weak 属性

weak 此特质表明该属性定义了一种“非拥有关系” (nonowning relationship)。为这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同 assign 类似, 然而在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。

那么 runtime 如何实现 weak 变量的自动置nil?

runtime 对注册的类, 会进行布局,对于 weak 对象会放入一个 hash 表中。 用 weak 指向的对象内存地址作为 key,当此对象的引用计数为0的时候会 dealloc,假如 weak 指向的对象内存地址是a,那么就会以a为键, 在这个 weak 表中搜索,找到所有以a为键的 weak 对象,从而设置为 nil。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 要实现weak属性,首先要搞清楚weak属性的特点: weak 此特质表明该属性定义了一种“非拥有关系” (non...
    SessionSinGod阅读 5,089评论 0 2
  • 要实现 weak 属性,首先要搞清楚 weak 属性的特点: weak 此特质表明该属性定义了一种“非拥有关系” ...
    狗狗臭鸡蛋阅读 4,256评论 1 0
  • runtime对注册的类,会进行布局,对于weak对象会放入一个hash表中,用weak指向的对象内存地址作为ke...
    RFeng阅读 2,860评论 0 1
  • 我突然想起了秀秀,那个温婉如水的南方姑娘。 秀秀是广东人,典型的南方姑娘:身材娇小,五官如她名字般清秀,不...
    或淡或雅阅读 2,713评论 0 0
  • 感恩父母养育之恩愿母亲身体健康衣食无忧智慧增长!感恩弟弟陪伴母亲让我有时间做其他事情!感恩姐夫对姐姐无微不至的关心...
    T上善若水阅读 2,563评论 0 0