iOS面试题(八)Objective-C语言 -关联对象(为分类添加实例变量)

本文深入探讨Objective-C中关联对象的实现机制与原理,讲解如何为分类添加成员变量,关联对象的添加、获取及移除方法,以及关联对象在全局容器中的存储方式。

Objective-C语言

  1.  分类(什么是分类?分类的实现机制、原理是怎样的?我们应该怎样为一个分类提供实例变量呢?--涉及到第2点关联对象的考察)
  2. 关联对象(Runtime分析和查看 分类和关联对象的实现机制、原理)
  3. 扩展、代理怎么使用(分类和扩展的区别在哪里?)
  4. KVO、KVC( KVO、KVC的实现机制、原理、包括涉及到了哪些设计思想)
  5. NSNotification(通知的实现机制和原理)
  6. 属性关键字(声明属性时,会用到一些关键字的实际问题)

     

关联对象
 

1.能否给分类添加成员变量?

  •    可以添加。我们不能在分类的声明或者说定义实现的时候,直接为分类添加成员变量;
       但是可以通过关联对象的技术来为分类添加成员变量,来达到分类可以添加成员变量的效果。
     

2.关于关联对象技术,有几个函数

      2.1 获取属性值  (根据指定的key到object这个对象当中,获取和key相对于的一个关联值)

  1. /*
     object 目标对象。即获取哪个对象的关联属性
     key 根据对应的key查找对象的属性
    */
    id objc_getAssociatedObject(id object, const void *key) 
    {
        return objc_getAssociatedObject_non_gc(object, key);
    }

        2.2 添加并设置属性值

  •               首先设定value值
  •               通过key和value建立一个关系(映射关系)
  •               然后我们把这个对应关系通过policy这个策略关联到object这个对象上面
  •               policy关联策略实际上就是声明或者告诉函数,value以哪种形式(copy、assign、retain等)关联到宿主对象上面

  • //objc_setAssociatedObject_non_gc方法透传_object_set_associative_reference ,具体_object_set_a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值