美文网首页
iOS编程中用类别为SDK内部添加一个属性

iOS编程中用类别为SDK内部添加一个属性

作者: 单线程Jack | 来源:发表于2019-07-19 10:46 被阅读0次

类别可以为已有的类添加方法,但是却不能直接添加属性,因为即使你添加了@property,它既不会生成实例变量,也不会生成setter、getter方法,即使你添加了也无法使用。这里的原理要单独的看runtime的本质。以及OC方法调用的原理和消息传递机制。
例如:为百度地图的类BMKPolygon添加属性identifier

#import "BMKPolygon+Identifier.h"

@implementation BMKPolygon (Identifier)

@dynamic identifier;

static char charKey;

- (void)setIdentifier:(NSString *)identifier{

    objc_setAssociatedObject(self, &charKey, identifier, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

- (NSString *)identifier{

    return objc_getAssociatedObject(self, &charKey);

}

@end
#import "BMKPolygon+Identifier.h"

@implementation BMKPolygon (Identifier)

@dynamic identifier;

static char charKey;

- (void)setIdentifier:(NSString *)identifier{

    objc_setAssociatedObject(self, &charKey, identifier, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

- (NSString *)identifier{

    return objc_getAssociatedObject(self, &charKey);

}

@end

相关文章

网友评论

      本文标题:iOS编程中用类别为SDK内部添加一个属性

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