1

メソッド パラメーターを介して変数を渡すことによって相互にデータを通信する 2 つの Objective-C クラスがあります。たとえば、変数を渡すメソッドを呼び出す場合があります。

ClassX *x = [[ClassX alloc] init];
[x passThisParameter:i];

変数はメソッドClassX内で正常に受信されます。passThisParameterこれは、ブレークポイントとログ出力で確認できます。

- (void)passThisParameter:(id)object {
    self.classVariable = object;
    NSLog(@"Object: %@", self.classVariable); // In the log I can see that classVariable has the same value as object does.
}

ただしclassVariable、上記の範囲外で使用しようとすると (たとえば、別のメソッドではあるが同じクラス内で)、常に として表示されNULLます。NULL にリセットされるのはなぜですか? classVariable後で変数を取得する方法は次のとおりです。

- (void)anotherMethodFromClassX {
    NSLog(@"Class Variable: %@", self.classVariable); // This is always NULL even though the variable is never used anywhere else (except when it's set in the method above)
}

また、クラス定義/ヘッダーと実装でさまざまな方法で変数を設定しようとしました:

  • @property (retain) id classVariable
  • @property (strong) id classVariable
  • @property (assign) id classVariable
  • @property (nonatomic, strong) id classVariable

この classVariable が にリセットされる理由についてのアイデアはありNULLますか? 私はそれを理解することができず、Googleで多くを見つけることができませんでした. プログラミング用語の一部が間違っている場合はご容赦ください。

編集: MRC ではなく ARC を使用しています。

編集:にリセットできるようClassXに設定した後、再割り当ておよび再初期化される可能性はありますか? UIでリロードされたとしましょう...classVariableNULL

編集:これが私のものClassXClassZ、関連するコードはオンラインで入手できます

4

1 に答える 1