美文网首页
(一)OC语法04(关联对象)

(一)OC语法04(关联对象)

作者: cdd48b9d36e0 | 来源:发表于2018-09-03 17:17 被阅读1次

    这里通过用关联对象(实际上就是Runtime的几个Api)达到给分类添加成员变量的效果

    分类里定义属性,不会生成下划线成员变量,生成的set和get方法也只有声明没有实现

    关联对象提供了以下API
    • 添加关联对象
      void objc_setAssociatedObject(id object, const void * key, id value, objc_AssociationPolicy policy)
    • 获得关联对象
      id objc_getAssociatedObject(id object, const void * key)
    • 移除所有的关联对象
      void objc_removeAssociatedObjects(id object)
      第1个api的参数objc_AssociationPolicy policy:
    关联对象的原理

    这里的第一个参数object是实例对象

    关联对象运用
    @implementation MJPerson (Test)
    
    - (void)setName:(NSString *)name
    {
        objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_COPY_NONATOMIC);
    }
    
    - (NSString *)name
    {
        // 隐式参数
        // _cmd == @selector(name)
        return objc_getAssociatedObject(self, _cmd);
    }
    

    相关文章

      网友评论

          本文标题:(一)OC语法04(关联对象)

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