美文网首页
iOS开发(8)关联对象

iOS开发(8)关联对象

作者: 迷心迷 | 来源:发表于2019-04-02 20:14 被阅读0次

思考:如何实现给分类“添加成员变量”?

  • 默认情况下,因为分类底层结构的限制,不能添加成员变量到分类中。但可以通过关联对象来间接实现

  • 关联对象提供了以下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)
  • key的常见用法
static void *MyKey = &MyKey;
objc_setAssociatedObject(obj, MyKey, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC)
objc_getAssociatedObject(obj, MyKey)

static char MyKey;
objc_setAssociatedObject(obj, &MyKey, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC)
objc_getAssociatedObject(obj, &MyKey)

使用属性名作为key
objc_setAssociatedObject(obj, @"property", value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
objc_getAssociatedObject(obj, @"property");

使用get方法的@selecor作为key
objc_setAssociatedObject(obj, @selector(getter), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC)
objc_getAssociatedObject(obj, @selector(getter))

  • objc_AssociationPolicy


    1.png
  • 关联对象的原理
    1、实现关联对象技术的核心对象有
    AssociationsManager
    AssociationsHashMap
    ObjectAssociationMap
    ObjcAssociation

2、objc4源码解读:objc-references.mm

2.png

3、原理


3.png

相关文章

  • iOS开发(8)关联对象

    思考:如何实现给分类“添加成员变量”? 默认情况下,因为分类底层结构的限制,不能添加成员变量到分类中。但可以通过关...

  • iOS关联对象技术原理

    iOS关联对象技术原理 iOS关联对象技术原理

  • iOS底层原理总结 - 关联对象实现原理

    iOS底层原理总结 - 关联对象实现原理 iOS底层原理总结 - 关联对象实现原理

  • 【iOS开发】Runtime关联对象

    众所周知,Category 是不能添加成员变量的,倒是可以添加属性,不过不会自动生成 getter 和 sette...

  • iOS开发-底层篇-Class详解

    相关文章 iOS开发-底层原理总结 - 关联对象实现原理[https://www.jianshu.com/p/b4...

  • iOS开发-底层源码探索的方式

    相关文章 iOS开发-底层原理总结 - 关联对象实现原理[https://www.jianshu.com/p/b4...

  • iOS Objective-C 关联对象

    iOS Objective-C 关联对象 1. 关联对象简介 对于关联对象,我们熟悉它的地方就是给分类添加属性。虽...

  • iOS对象关联

    什么是关联对象 关联对象是指某个OC对象通过一个唯一的key连接到一个类的实例上。 举个例子:xiaoming是P...

  • iOS:关联对象

    目录一,添加属性二,基本知识三,底层原理四,注意点 一,添加属性 1,在类中添加属性,系统会自动生成带下划线的成员...

  • iOS 关联对象

    在平时的工作中经常碰到给类别添加属性的操作,那么实现思路是怎么样的呢? 代码实现:新建一个Person类和Pers...

网友评论

      本文标题:iOS开发(8)关联对象

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