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

しかし、それは別の問題につながります。Associated Objects で簡単にできることが定期的にできないのはなぜですか? Apple がこのようなカテゴリのプロパティを実装しないのはなぜですか?

4

1 に答える 1

4

合成されたプロパティ アクセサーは、インスタンス変数を使用します。一意性が保証されないため、カテゴリを介してインスタンス変数を追加することはできません。同じインスタンス変数が別のカテゴリによって追加される可能性があります。

お気づきのように、関連するオブジェクト テーブルのキーが一意である限り、inside-out オブジェクト パターンを使用すると、カテゴリでアクセサーを定義できます。そのまま使い続けて大丈夫です。これらのアクセサーを生成するためのファーストパーティ コンパイラ サポートが必要な場合は、Apple に問い合わせる必要があります。

于 2012-12-04T11:20:16.227 に答える