需要一个iPhone程序员判断每一步和每一个指针==nil吗?

需要一个iPhone程序员判断每一步和每一个指针==nil吗?,iphone,objective-c,pointers,Iphone,Objective C,Pointers,例如: NSString *myString = [[NSString alloc] init]; if (nil == myString) { return; } 我需要这样做吗?谢谢 Objective-C允许调用nil指针,这与其他语言不同,并允许跳过一些检查。当然,在某些特定情况下检查==nil仍然是明智的,但是,您不必检查代码中的每个步骤。看看苹果的文档和示例,试着按照他们的风格来做。不,你不需要这样做,我不能说我见过普遍使用这种模式的代码 另外,if语句可以缩短为: if

例如:

NSString *myString = [[NSString alloc] init];
if (nil == myString) {
    return;
}

我需要这样做吗?谢谢

Objective-C允许调用nil指针,这与其他语言不同,并允许跳过一些检查。当然,在某些特定情况下检查==nil仍然是明智的,但是,您不必检查代码中的每个步骤。看看苹果的文档和示例,试着按照他们的风格来做。

不,你不需要这样做,我不能说我见过普遍使用这种模式的代码

另外,
if
语句可以缩短为:

if (! myString) {
    return;
}
…这是同等的,但同样多余。检查
nil
可能很有用,但通常不会在对象实例化后立即执行。相反,典型的情况是这样做以确保对象不会过度释放,例如使用以下模式:

if (myObj) {
    [myObj release];
    myObj = nil;
}

请注意,Objective-C中允许对
nil
调用任何方法,因此与Java等语言相比,浮动的意外
nil
值所造成的伤害要小得多,在Java等语言中,尝试使用
null
引用执行任何操作都会引发异常,如今,大多数iPhone应用程序代码都假设在正常操作中不会出现堆外情况(这是此类简单实例化操作失败的唯一逻辑原因)。只有在创建大型(如图像)对象时,才能检查分配失败


当然,init例程可能由于许多原因而失败,因此在复杂的实例化操作之后检查nil可能是有保证的(取决于对象类型)。(请记住,某些对象的许多其他方法在某些情况下也可以返回nil,因此您需要相应地阅读规范和代码。)

我认为[nil message]是可以的,因此,当不涉及对象时,您只需要检查更具体的问题,当一系列此类无声故障可能导致需要显式管理的问题时,您的第二个代码片段没有意义。如果
myObj
nil
,则对其调用
release
将无效。在这种情况下,绝对没有理由检查
nil
,因为它不能“确保对象没有过度释放”。@Josh Caswell-您只关注
if
。确保
myObj
不会过度释放的部分是
[myObj release]
后面的
myObj=nil
行。
if
除了可读性和防止对
[nil release]
的无意义调用以及
nil=nil
的无意义赋值之外,没有任何作用。我不确定为什么我会“着迷”,因为问题是关于
if
,你的答案是:«检查
nil
可能很有用……典型的情况是这样做…»,但没问题。