美文网首页
一种objc的runtime的弱引用实现方式

一种objc的runtime的弱引用实现方式

作者: 幻影形風 | 来源:发表于2019-02-21 21:59 被阅读0次

    问题:如何动态的给oc对象添加weak属性的变量?

    现状:

    objc的runtime仅支持assign,strong,copy,retain。所以得从其他方面进行处理。

    解决:

    可以通过以下方式:

    首先定义个弱引用类容器,持有某变量的弱引用。

    @interfaceWeakContainer :NSObject

    @property(nonatomic,weak)id weakObject;

    @end

    其次在runtime里面实现,用弱引用类容器对象做中间变量来传值。

    接口:

    @interfaceSomeObject(Addtion)

    @property(nonatomic,weak)NSNumber * item;

    @end

    实现:

    #import "SomeObject+Addtion.h"

    #import "WeakContainer.h"

    @implementationSomeObject(Addtion)

    - (void)setItem:(NSNumber*)item

    {

        WeakContainer * container = [[WeakContainer alloc] init];

        container.weakObject= item;

        objc_setAssociatedObject(self, @selector(item), container, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    }

    -(NSNumber*)item

    {

        WeakContainer* container =objc_getAssociatedObject(self,@selector(item));

        returncontainer.weakObject;

    }

    @end

    以上就实现了一个通过rumtime来实现弱引用属性变量的过程。

    相关文章

      网友评论

          本文标题:一种objc的runtime的弱引用实现方式

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