2017-08-10 13 views
0

私は変数を初期化していくつかのデータで初期化するいくつかのシナリオを持っています。例えば、 value never read警告私を与えるケース・アナライザの両方で複数のifステートメントまたはネストされたifで変数を初期化する適切な方法

ABCClass *objectAbc = [[ABCClass alloc] init]; //---- Analyser warning 
objectAbc = someOtherObjectOfThisKind; 

NSArray *array = [NSArray array];    //---- Analyser warning 
array = arrayOfArrays[0]; 

。変数を初期化する適切な方法は何ですか。保持カウントを増やしていますか?我々は複数のIFSを持っている場合に、変数を初期化する方法

が言うことができます、

- (void)computeVariable { 
    NSString *var = @"";  // ----Analyser Warning 
    if ([someLabel isEqualToString @"A"]) { 
     var = @"A"; 
    } 
    if ([someLabel isEqualToString @"B"]) { 
     var = @"B"; 
    } 
... remaining code 
} 
+0

[初期化時に保存された値が読み取られない](https://stackoverflow.com/questions/5762161/value-stored-during-its-initialization-is-never-read) – OMGHaveFun

答えて

4

あなたの最初のステートメントは、変数を宣言し、それをタイプÀBCClass`の新しいオブジェクトを割り当てます。 2番目のステートメントは、この変数に別のオブジェクトを割り当てます。したがって、最初のステートメントのオブジェクトはリリースされ(ARC)、プログラムでは使用されません。これらの2行は、

ABCClass *objectAbc = someOtherObjectOfThisKind; 

と書く必要があり、アナライザーのメッセージは表示されません。変数arrayと同じです。

ARCを使用している場合は、変数を明示的に保持することはできません。 MRCを使用している場合は[[ABCClass alloc] init]のメモリリークが1つあります。これはreleaseをこのオブジェクトに送信しないためです。一方、[NSArray array]は、目的のメモリ管理ルールのためにMRCにリークが発生しません。

編集の補足:varがifブロックの後に使用されると、条件が偽の場合、初期値はvarです。 varがifブロックの内部でのみ使用されている場合は、アナライザーの警告が表示されます。この場合、ifブロックごとにvarの宣言を移動するか、初期化しないでください。 g。 NSString *var;

+0

説明が良好です –

+0

複数のIFSまたはネストされたifがある場合、これを行う方法。私の編集した質問を見てください。 あなたの前の説明をありがとう –

+0

あなたの答えをありがとう。 –

関連する問題