2

ローカル変数を初期化するのを忘れていましたが、使用しても警告が表示されませんでした。を使用しているためARC、変数は に初期化されてnilいるため、害はありませんが、初期化されていない値を使用したときに警告が必要です。を無効にするARCと、期待どおりの警告が表示されます。

NSString *foo;
NSString *baz;
if (bar) {
    foo = @"fizz";
} else {
    foo = @"buzz";
}
NSLog(@"foo: %@", foo);  // foo: (fizz|buzz)
NSLog(@"baz: %@", baz);  // baz: (null)

ARC なし:

/blah/blah/blah/Blah.m:14:18: note: initialize the variable 'foo' to silence this warning
NSString *foo;
             ^

- 編集 -

local blocks を使用して、初期化されていない値を不可能にする方法を見つけました。これにより、警告が不要になります。

4

3 に答える 3

5

ARC では、Objective C オブジェクトへのポインターは自動的に に初期化されるnilため、コンパイラーが警告できる「初期化されていない値」はありません。

于 2012-10-16T18:49:06.970 に答える
2

Clangには、希望どおりに動作するように見えるオプションがあります-Wuninitializedが、別の回答で指摘されているように、変数はARCで0/ nilARCの下で初期化されることが保証されています。

于 2012-10-16T18:54:13.663 に答える