【发布时间】:2014-11-22 19:00:03
【问题描述】:
我正在阅读一个关于 Objective-c 中 NULL 和 nil 之间区别的问题,可在此处找到:NULL vs nil in Objective-C
我不确定是否完全理解其中的区别。我知道 NULL 应该用于 C 风格的指针,而 nil 应该用于 id 和对象指针。
我一直在阅读 Stephen Kochan 的“Objective-C 第四版编程”。书中的一些代码示例与上述问题中的描述不符。
例如:
一个代码示例创建了一个返回 NSMUtableArray 的方法,他尝试填充 NSMutableArray,如果数组最后为空,他返回 nil:
-(NSMutableArray *) someMethod
{
NSMutableArray *arr = [NSMutableArray array];
//try to populate arr
if([arr count])
{
return arr;
}
else
{
return nil;
}
}
稍后在另一个代码示例中,他使用 NULL 作为指针对象
{
NSFileManager *fm = [NSFileManager defaultManager];
[fm copyItemAtPath: @"some file path" error: NULL]
}
查看 NSFileManager 文档,它说如果不需要错误信息,则为 NSError 指针传递 nil。
【问题讨论】:
-
所有 Objective-C 对象都用作指针,而不是值。所以对象的类型总是
SomeType*。在您的示例中使用NULL的原因是它是一个双指针,而不仅仅是一个单指针。另一种思考方式可能是您通常使用NULL可能会取消引用,而nil则不会。
标签: objective-c null