如果我在使用 ARC 时未能初始化变量,clang 如何警告我?

Hea*_*ers 2 objective-c clang clang-static-analyzer automatic-ref-counting

我忘记初始化一个局部变量,我在使用它时没有收到警告。由于我使用的是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)
Run Code Online (Sandbox Code Playgroud)

没有 ARC:

/blah/blah/blah/Blah.m:14:18: note: initialize the variable 'foo' to silence this warning
NSString *foo;
             ^
Run Code Online (Sandbox Code Playgroud)

- 编辑 -

我已经想出了如何使用 local blocks 使未初始化的值变得不可能。这消除了警告的需要。

Mar*_*n R 5

使用 ARC,指向 Objective C 对象的指针会自动初始化为nil,因此没有编译器可以警告的“未初始化值”。