Fork me on GitHub

使用Runtime为现有的类添加Weak属性

写在前面

在为现有的类增加属性时,我们首先会想到使用Runtime的对象绑定来处理,对象绑定也是我们在平时的开发中经常使用的伎俩,但是这里想增加的是weak类型的属性,查看Apple API 在对象绑定时没有提供此类型,如果有,那就没有这篇blog了,那么weak有什么特殊性呢?最简单的是引用计数不 +1,不存在相互引用 在属性释放时会自动置nil 适用于对象等。

思考🤔与实现

方案1

方案描述

那么我们怎么实现类似的功能呢?当然是从assign出手,其特性是引用计数不+1,不存在相互引用 在属性释放时不会自动置nil等。那么我们可以使用assign来模拟实现weak属性,只需要在属性释放时自动置nil即可。

方案实现

简单封装为如下的使用方式

1
2
3
- (void)bm_setWeekAssociatedObjectWithKey:(const void *)key value:(id)value OBJC_AVAILABLE(10.6, 3.1, 9.0, 1.0);

- (id)bm_getWeakAssociatedObjectWithKey:(const void *)key OBJC_AVAILABLE(10.6, 3.1, 9.0, 1.0);

具体实现请查看Demo

方案2

使用NSPointerArray处理

参考

https://github.com/ChenYilong/iOSInterviewQuestions

- END -
关注微信公众号,发现更多精彩

文章作者:梁大红

特别声明:若无特殊声明均为原创,转载请注明,侵权请联系

版权声明:署名-非商业性使用-禁止演绎 4.0 国际