В observeValueForKeyPath:ofObject:change:context: - почему docs используют NULL вместо nil, если не указывать указатель контекста?
NULL vs nil в Objective-C
Ответ 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 *).
