В 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 *).