简叙weak

作者: pretzei | 来源:发表于2016-09-09 00:26 被阅读0次

weak故名思义就是弱~与其相对应的不免想到strong。所以作为小受的weak它本身是一种非拥有的关系。

那什么是“非拥有”呢?就是我不曾拥有过你,但是我的钱包里有你的照片。本身不持有这个对象,但能和其建立联系,当对象销毁时自动设为nil,这个assign类似,不过assign只能针对纯量类型,进行简单赋值。不过weak只能针对oc对象,而assign却可以用于非oc对象。

那weak大概是如何实现的呢?我们用runtime脑补一波。runtime对注册的类会放入一个hash表中,当计数为0时出发dealloc,这时候检查表中对在这表中用weak指向这个对象的全部设置为nil。首先,我们设计一个绑定函数objc_storeWeak(&a, b) &a为内存地址 b为对象 。当b为nil时,a设置为nil;当b不为nil时,a,b指向同一块内存。

在对局部变量设置为weak时,直接在前面加上__weak。比如在对block内使用self时一定要用__weak说三遍!!!否则self和block相互持有,这样会造成循环引用,导致内存对关系没理清而造成卡死。

还有比如delegate也是需要使用weak,assign也可以。否则也会有循环引用的现象。

大概就是如此,如果还有什么新的知识点请告诉我!THX

相关文章

  • 简叙weak

    weak故名思义就是弱~与其相对应的不免想到strong。所以作为小受的weak它本身是一种非拥有的关系。 那什么...

  • 2018-11-20 weak实现原理 - 简书

    weak实现原理 - 简书

  • 简叙

    世界太繁华 人生太复杂 日子总是匆忙 脚步不曾停下 其实偶尔 一盏孤灯 一杯清茶 一篇文章 几句话语 一份安宁 放...

  • 简叙

    去了很多地方,发现这个世界充满着你不能理解的人和事,但又充满着不可思议的善意和美好。我并没有刻意去讨好谁,只是真心...

  • 简叙

    门斜梁柱歪,想是有飞贼。

  • __weak简析

    当一个 __weak 类型的指针指向的对象被释放时,该指针会自动被置成nil,因此__weak关键字修饰的指针又被...

  • __weak简析

    弱引用在oc中被经常用到的,用__weak修饰的对象不会引用计数+1,不会被强引用。那么__weak是怎么做到的呢...

  • 闲话简叙

    好久没更新,生活依旧如原来,间歇性给自己创造点“不一样”。 最近好想入手一部IPAD PRO,也不能说囊中羞涩,但...

  • 《活法》简叙

    16年写下的这篇文章,遗忘在电脑里。 非常喜欢这本书,言简意赅,没有多余的篇幅和文字,却直接回答了人类一直追寻的问...

  • 简叙三

    牌,不是说人多少才能体现好玩程度,而是取决于和你玩的是谁,是否愿意陪你在深夜消遣。 烟,虽然看起来不像是在戒,但是...

网友评论

    本文标题:简叙weak

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