声明一个 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.
我有这个代码:
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.