Jor*_*Kay 3 macos cocoa objective-c
假设我想创建一个实例NSString,该实例根据另一个变量的值初始化为某个值.通常,我会这样做
NSString *string;
if(foo == 1)
string = @"Foo is one.";
else
string = @"Foo is not one.";
Run Code Online (Sandbox Code Playgroud)
但是,在我看到的一些示例代码中,我见过人们这样做
NSString *string = nil;
if(foo == 1)
string = @"Foo is one.";
else
string = @"Foo is not one.";
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别,哪种方法更受欢迎?
我个人的偏好是立即初始化任何变量.但是,在您提供的示例中,这两种方法是等效的.
在C语言(例如C,C++,Obj-C)未立即初始化可能包含随机的垃圾值的变量.在初始化之前使用该变量会导致意外行为(从希望崩溃到获得意外行为).
示例 考虑以下示例:
int abs;
if (argument > 0) abs = argument;
else if (argument < 0) abs = -1 * argument;
NSLog(@"%i", abs);
Run Code Online (Sandbox Code Playgroud)
abs如果argument为0 ,代码会保留未初始化的变量.因此,您将记录随机值,然后导致破坏程序其余部分的值; 并且很难发现问题出在哪里!
如果你使用未初始化的参考,你很可能会得到一个EXC_BAD_ACCESS.
| 归档时间: |
|
| 查看次数: |
364 次 |
| 最近记录: |