1

我想首先指出,实际上我们“可以”

只需使用关联对象:

@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 不在这样的类别中实现属性?

4

1 回答 1

4

综合属性访问器使用实例变量。您不能通过类别添加实例变量,因为无法保证唯一性 - 相同的实例变量可能会被另一个类别添加。

正如您所注意到的,由内向外对象模式允许您在类别中定义访问器,只要关联对象表的键是唯一的。继续使用它很好。如果您想要第一方编译器支持生成这些访问器,您必须询问 Apple

于 2012-12-04T11:20:16.227 回答