1

私はxcode 4.5.2でios6.0 SDKを使用しています

カテゴリを実装するために使用した次のコードは次のとおりです

.h

@interface NSObject (busyMode)  
@property (nonatomic,assign) BOOL busy;
@end

.m

@implementation NSObject (busyMode)
BOOL _bsy;

-(BOOL)busy{
    return _bsy;
}

-(void)setBusy:(BOOL)busy
{
    _bsy = busy;
}
@end

多くの投稿を読んでいると、カテゴリにインスタンス変数を含めることはできないと書かれています。したがって、上記のコードは機能しません。しかし、試してみると、すべてうまく機能していました。

カテゴリに関連する変更がありましたか、それとも運が良かったのですか??

4

4 に答える 4

2

他の人が指摘したように、インスタンス変数を追加したのではなく、すべてのインスタンス間で共有されるグローバル変数を追加しました。

カテゴリはインスタンス変数を追加できません。ただし、インスタンス変数が絶対に必要な場合は、 と を使用してインスタンス変数をシミュレートできobjc_setAssociatedObject()ますobjc_getAssociatedObject()

于 2013-03-07T09:09:40.170 に答える
1

これは、インスタンス変数ではない単一のグローバル変数を定義したためです。

このオブジェクトの 2 つのインスタンスをインスタンス化してみると、各インスタンスが異なる値を保持できないことがわかります。

于 2013-03-07T07:30:14.540 に答える
0

iVar を追加していません。グローバル変数_bsyを定義し、カテゴリで定義されたプロパティの getter/setter でアクセスしています。

于 2013-03-07T07:29:33.450 に答える