5

クラスメソッドを実装するアプリケーションを開発しています.h クラスメソッドのインスタンス変数にアクセスするにはどうすればよいですか?

これが私のインスタンスメソッドで、クラス「SomeClass」からオブジェクトが作成されます。

-(void)viewDidLoad
{
   SomeClass *obj=[SomeClass alloc] init];
}

これがクラスメソッドで、このメソッドでインスタンス変数「obj」にアクセスしようとしているため、「インスタンス変数「obj」がクラスメソッドでアクセスしています」というエラーが発生しました。

+(void)classMethodImplement
{

}
4

3 に答える 3

15

クラス メソッドからインスタンス変数にアクセスすることはできません。インスタンス変数はクラスの特定のインスタンスにバインドされているため、クラス メソッドからそれらにアクセスすることは意味がなく、言語で許可されていません。

于 2012-08-19T11:52:19.427 に答える
9

それを行う明白な方法があります。静的変数を使用するだけです。

オプション1:

必要なインスタンス変数を静的変数に格納します。

static id static_iVar = nil;
- (void)viewDidLoad {
    // blah, blah, blah
    static_iVar = _iVar;
}

オプション 2:

静的変数に保存してから、好きなようにそのiVarselfにアクセスします。

static id static_self = nil;
- (void)viewDidLoad {
    // blah, blah, blah
    static_self = self;
}

いずれの場合も、細心の注意を払ってください。適切なチェックなどを行わずに同じクラスの 2 つのインスタンスを割り当てた場合、どのようなバグが発生するかは誰にもわかりません。

次に、静的メソッドで静的変数を使用します。

+(void)classMethodImplement
{
    // Use it here...
}
于 2012-08-19T12:31:55.400 に答える
4

呼び出し元が必要なオブジェクトを提供するように、クラスメソッドを書き直します。

+(void)classMethodImplement:(SomeClass *)obj
{
}
于 2012-08-19T14:07:33.087 に答える