メソッド パラメーターを介して変数を渡すことによって相互にデータを通信する 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でリロードされたとしましょう...classVariable
NULL
編集:これが私のものClassX
でClassZ
、関連するコードはオンラインで入手できます。