美文网首页
objc_setAssociatedObject和objc_ge

objc_setAssociatedObject和objc_ge

作者: 汪飞蛟 | 来源:发表于2017-01-17 19:48 被阅读0次

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

相关文章

网友评论

      本文标题:objc_setAssociatedObject和objc_ge

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