简叙weak

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容