iOS 尽量减少使用weak修饰符

weak修饰符修饰的变量在被使用的时候会涉及到表查询,消耗cpu性能。

id __weak obj1 = obj; // 变量obj由strong修饰
/* 编译器模拟代码 */
id obj1;
objc_initWeak(&obj1, obj);
objc_destoryWeak(&obj1);

等同如下

/* 编译器模拟代码 */
id obj1;
obj1 = 0;
objc_storeWeak(&obj1, obj);
objc_storeWeak(&obj1, 0);

objc_storeWeak 函数把第二个参数的赋值对象的地址作为键值,将第一个参数的带有 __weak 修饰的变量的地址注册到 weak 表中。如果第二个参数为 0,把变量从weak表中删除。
这里边涉及到了查表的操作,消耗cpu性能,所以最好只在避免循环引用的时候才去使用__weak修饰符。

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

推荐阅读更多精彩内容