NULL vs nil в Objective-C

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

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

Они технически одинаковы и отличаются только стилем:

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

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

Ответ 4

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

где nil is zero typed as id,

NULL is zero typed as void*.

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

Ответ 5

Они почти одинаковы, кроме

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