美文网首页
OC中的Category添加成员变量

OC中的Category添加成员变量

作者: it小小菜鸟 | 来源:发表于2020-07-16 15:45 被阅读0次

Category能否添加成员变量?

不能直接给Category添加成员变量,但能间接实现成员变量的效果。能直接添加属性。添加的属性,只能生成getter、setter方法的声明,不能生成方法的实现,也不能生成相应的成员变量。

通过runtime关联对象

  • 关联对象并不是存储在被关联对象本身内存中
  • 关联对象存储在全局统一的一个AssociationsMapManager中,通过AssociationsHashMap来存储
  • 设置关联对象为nil,就相当于是移除关联对象
  • objc_removeAssociatedObjects(id):移除id对象所关联的所有对象
  • 当对象销毁后,所有被关联的对象也会被释放

XX_category.h

#import "QSPerson.h"

NS_ASSUME_NONNULL_BEGIN

@interface QSPerson (Property)
/** 姓名 */
@property (nonatomic ,copy) NSString *name;
@end

NS_ASSUME_NONNULL_END

XX_category.m


#import "QSPerson+Property.h"
#import <objc/runtime.h>
@implementation QSPerson (Property)

- (void)setName:(NSString *)name
{
    /**
     @object 被关联的对象
     @key 关联的key
     @value  关联的值
     @policy 政策、策略,对应修饰符
     */
    objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
- (NSString *)name
{
    // 隐式参数 _cmd = @selector(name)
    return objc_getAssociatedObject(self, _cmd);
}

@end

底层数据结构图:

截屏2020-07-16 下午3.32.53.png

相关文章

  • Category关联对象

    一、分类中添加成员变量Category中添加成员变量.png 所以Category中是不能添加成员变量 二、Cat...

  • Category能否添加成员变量

    Category能否添加成员变量,如果可以,怎么给Category添加成员变量? 不能直接给Category添加成...

  • IOS基础知识-关联对象原理篇

    Category能否添加成员变量?如果可以,如何给Category添加成员变量?答:不能直接添加成员变量,但是可以...

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

    前言 Category能否添加成员变量?如果可以,如何给Category添加成员变量?答:不能直接添加成员变量,但...

  • OC中的Category添加成员变量

    Category能否添加成员变量? 不能直接给Category添加成员变量,但能间接实现成员变量的效果。能直接添加...

  • OC中分类的实现原理

    OC中为类添加一个分类(Category)可以实现为类添加对象方法、类方法、添加属性(添加的属性不生成成员变量)、...

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

    面试题 Category能否添加成员变量?如果可以,如何给Category添加成员变量?答:不能直接添加成员变量,...

  • 关联对象实现原理

    问题: Category能否添加成员变量?如果可以,如何给Category添加成员变量? 1. 给Category...

  • Category-关联对象

    分类添加属性 Category能否添加成员变量?如果可以,如何给Category添加成员变量?不能直接给Categ...

  • 关联对象

    O、题:Category能否添加成员变量?如果可以,如何给Category添加成员变量? 答:不能直接给Categ...

网友评论

      本文标题:OC中的Category添加成员变量

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