每当您想在类上伪造 ivar 时,关联对象就会派上用场。它们非常通用,因为您可以将任何对象与该类相关联。
也就是说,您应该明智地使用它,并且只用于子类化感觉很麻烦的小事情。
但是,如果您唯一的要求是向所有UIView
实例添加一个整数,tag
那么就是要走的路。它已经存在并可供您使用,因此无需在运行时修补UIView
.
如果你想用比整数更多的东西来标记你UIView
的东西,比如通用对象,你可以定义一个如下所示的类别。
UIView+标记.h
@interface UIView (Tagging)
@property (nonatomic, strong) id customTag;
@end
UIView+标签.m
#import <objc/runtime.h>
@implementation UIView (Tagging)
@dynamic customTag;
- (id)customTag {
return objc_getAssociatedObject(self, @selector(customTag));
}
- (void)setCustomTag:(id)aCustomTag {
objc_setAssociatedObject(self, @selector(customTag), aCustomTag, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end
Erica Sadun 最近在这篇博文中提出了使用属性选择器作为键的技巧。