声明一个 NSString,它应该首先设置为 nil,根本不设置还是 init 和 alloc?

Declaring a NSString, should it first be set to nil, not set at all or init and alloc?

我有这个代码:

int tag = ...
NSString *url;
if(tag==1){
    url = @"login";
}
else {
    url = @"register";
}

我想先声明 NSString 变量,然后再知道它的值是什么。什么比较好?:

NSString *url; // option 1

NSString url = nil;  // option 2

NSString *url = [[NSString alloc] init];  // option 3

想知道常见的做法是什么,每种做法的优缺点是什么?

对于您的用例,最佳做法是使用

NSString * url = nil;

我相信 ARC 会为您做到这一点,但明确说明总是好的。

初始化变量是个好习惯。
不仅可以防止BUG,如果一直这样做就不用担心有没有必要了,可以考虑更重要的事情。

不过你需要用一个合理的值来初始化;你的第三个变体分配了一个 NSString 只是为了立即丢弃它,所以这是一个非常糟糕的做法。

最佳实践:

NSString * url = nil;

但是在你的情况下你可以做到,虽然它很复杂。

NSString * url = tag==1 ? @"login" : @"register";

这就是Apple's documentation tells us:

Stack Variables Are Initialized with nil

Using ARC, strong, weak, and autoreleasing stack variables are now implicitly initialized with nil. For example:

- (void)myMethod {
    NSString *name;
    NSLog(@"name: %@", name);
}

will log null for the value of name rather than perhaps crashing.