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