Я читал вопрос о разнице между NULL и nil в объекте-c, найденный здесь: NULL против nil в Objective-C
Не уверен, полностью ли понял разницу. Я понял, что NULL следует использовать для указателей в стиле C и nil для указателей идентификаторов и объектов.
Я читал «Программирование на 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 говорится, что нужно передать nil для указателя NSError, если информация об ошибке не нужна.
SomeType*
. Причина, по которой в вашем примере используетсяNULL
, заключается в том, что это двойной указатель, а не просто одиночный указатель. Другой способ думать об этом может заключаться в том, что вы обычно используетеNULL
там, где это может быть разыменовано, иnil
там, где этого не будет. - person ahruss   schedule 22.11.2014