NULL против нуля в Objective-C - PullRequest
       47

NULL против нуля в Objective-C

179 голосов
/ 17 февраля 2009

В observeValueForKeyPath:ofObject:change:context: - почему документы используют NULL вместо nil, если не указан указатель контекста?

Ответы [ 5 ]

225 голосов
/ 17 февраля 2009

nil следует использовать только вместо id, что мы, программисты на Java и C ++, считаем указателем на объект. Используйте NULL для не объектных указателей.

Посмотрите на объявление этого метода:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
    change:(NSDictionary *)change context:(void *)context

Контекст - это void * (то есть указатель в стиле C), поэтому вам определенно следует использовать NULL (который иногда объявляется как (void *)0) вместо nil (который имеет тип id ).

64 голосов
/ 17 февраля 2009

Технически это одно и то же (0), но nil обычно используется для типа объекта Objective-C, а NULL используется для указателей в стиле c (void *).

52 голосов
/ 05 ноября 2009

Технически они одно и то же и отличаются только стилем:

  • Стиль Objective C говорит, что nil - это то, что нужно использовать для типа id (и указателей на объекты).
  • Стиль C говорит, что NULL - это то, что вы используете для void *.
  • Стиль C ++ обычно говорит, что вы должны просто использовать 0.

Обычно я использую вариант, соответствующий языку, в котором тип объявлен .

12 голосов
/ 26 июля 2013

NULL - это C equivalent из nil, указатель на ничто;

где nil is zero typed as id,

NULL is zero typed as void*.

Один важный момент Вы не можете отправить сообщение в NULL. Поэтому во многих местах предпочтительно использовать nil в target-C.

3 голосов
/ 01 февраля 2016

Они почти одно и то же, кроме

nil используется в стиле Objective-C. где NULL для указателей типа C и имеет тип (void *).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...