我首先要注意的是,实际上我们“可以”
只需使用相关对象:
@implementation UIButton (BGButtonWithImages)
static char UIB_ImageOfButton;
-(void)setImageObject:(Image *)imageObject
{
objc_setAssociatedObject(self, &UIB_ImageOfButton, imageObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(Image*)imageObject
{
return (Image*)objc_getAssociatedObject(self, &UIB_ImageOfButton);
}
@end
但这导致了另一个问题。为什么无法定期使用关联对象轻松完成某些操作?为什么Apple没有在这样的类别中实现属性?
答案 0 :(得分:4)
合成属性访问器使用实例变量。您不能通过类别添加实例变量,因为不能保证唯一性 - 相同的实例变量可能会被另一个类别添加。
正如您所注意到的,inside-out object pattern允许您在类别中定义访问者,只要关联对象表的键是唯一的。继续使用它是好的。如果您希望第一方编译器支持生成这些访问器,则必须ask Apple。