可以用runtime来对某个对象绑定键值。这样可以很方便的获取数据。
例如一个页面上很多button,button的作用是跳转到另外一个页面,另外一个页面就显示一段和button对应的文字。
这样如果在一个selector里处理的话,可以辨识是某个button,但是很难获得其相对应的那段文字。如果用dict来储存也是可以的,但是dict里保存的数据是强类型,会使引用计数加1无法及时释放。这时候可以采用下述方法来处理。
@implementation NSObject (AMAssociatedObjects)
- (void)associateValue:(id)value withKey:(void *)key
{
objc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_RETAIN);
}
- (void)weaklyAssociateValue:(id)value withKey:(void *)key
{
objc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_ASSIGN);
}
- (id)associatedValueForKey:(void *)key
{
return objc_getAssociatedObject(self, key);
}
@end
[button associateValue:subCategory withKey:@"LiveCategory"];
UIButton *button = sender;
LiveCategory *category = [button associatedValueForKey:@"LiveCategory"];