objc_setAssociatedObject和objc_getAssociatedObject动态增加分类属性

1.@selector原理介绍

SEL 类成员方法的指针

可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取.

它的结果是一个SEL类型。这个类型本质是类方法的编号(函数地址)

2.使用@selector方法地址作为分类属性标识符

@interface NSObject (CategoryWithProperty)

@property (nonatomic, strong) NSObject *property;

@end

@implementation NSObject (CategoryWithProperty)

- (NSObject *)property {

return objc_getAssociatedObject(self, @selector(property));

}

- (void)setProperty:(NSObject *)value {

objc_setAssociatedObject(self, @selector(property), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

@end

3. 使用方法_cmd作为分类属性标识符

@interface NSObject (CategoryWithProperty)

@property (nonatomic, strong) NSObject *property;

@end

@implementation NSObject (CategoryWithProperty)

- (NSObject *)property {

return objc_getAssociatedObject(self, _cmd);

}

- (void)setProperty:(NSObject *)value {

objc_setAssociatedObject(self, _cmd, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,768评论 0 9
  • runtime 和 runloop 作为一个程序员进阶是必须的,也是非常重要的, 在面试过程中是经常会被问到的, ...
    made_China阅读 1,226评论 0 7
  • Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的...
    有一种再见叫青春阅读 609评论 0 3
  • 生命中的你 你那一曲心音 唤醒了我的梦 你的明眸里 闪烁着喜悦的泪水 我的内心 不再独舞 我的理想 仿佛已经插...
    鸣鸥阅读 299评论 3 4
  • 有那么一段时间,我心中满是这种思想——我的世界充满恶意。每件事都可能招致我的不满,至少很长一段时间我是这样想的。 ...
    落雨无痕h阅读 557评论 0 2