需要一个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
可能很有用……典型的情况是这样做…»,但没问题。