美文网首页
(一)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(关联对象)

    这里通过用关联对象(实际上就是Runtime的几个Api)达到给分类添加成员变量的效果 分类里定义属性,不会生成下...

  • Swift 为分类增加属性objc_getAssociated

    OC 获取关联对象 Swift 获取关联对象——错误的写法 Swift 获取关联对象——正确的写法 设置关联对象 ...

  • OC关联对象

    ,❓思考一下:分类中能否添加属性?能否添加成员变量?直接上代码验证一下:创建一个Person类和它的分类Perso...

  • OC 关联对象

    关联对象是指某个OC对象通过一个唯一的key连接到一个类的实例上. 举个栗子: mikey是Person类的一个实...

  • OC关联对象

    分类实现原理、加载时机[https://www.jianshu.com/p/7c830ce3c303] 一. 为什...

  • OC语法 OC对象

    思考: 什么是对象? 根据OC源码可以最新版OC最新版源码, OC对象内都含有isa指针,可以说,凡是含有isa指...

  • 杂记

    OC语法问题 OC语法细节:不允许直接修改OC对象的结构体属性的成员 比如:self.scrollView.con...

  • OC关联对象小结(一)

    OC关联对象小结(一) 使用场景 为现有的类添加属性,变量 在Objective-C中可以通过Category给一...

  • iOS大厂面试题总结

    1. OC语法 1. OC中对象的结构(腾讯一面) Instance对象如果是NSObject对象,对象中只有一个...

  • OC-关联对象

    分类(Category):是OC中的特有语法,它是表示一个指向分类的结构体指针。原则上它只能增加方法,不能增加成员...

网友评论

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

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