Ответы:
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
).
context
in observeValueForKeyPath:ofObject:change:context:
is void *
, не означает ли это, что данные, передаваемые как, context
могут быть указателем на объект? Я думаю, что это частый случай. Вот почему я не понимаю, почему документы всегда используют NULL
вместо nil
.
Технически это одно и то же (0), но nil обычно используется для типа объекта Objective-C, а NULL используется для указателей в стиле c (void *).
Технически они одно и то же и отличаются только стилем:
nil
, что использовать дляid
типа (и указатели на объекты).NULL
это то, что вы используете дляvoid *
.0
.Я обычно использую вариант, который соответствует языку, на котором объявлен тип .
NULL
это C equivalent
из nil
, указатель ничего;
где nil is zero typed as id
,
NULL is zero typed as void*
,
Один важный момент: вы не можете отправить сообщение в NULL. Поэтому предпочтительно использовать nil в target-C во многих местах.
Они почти одно и то же, кроме
nil
используется в стиле Objective-C. где NULL
для указателей типа C и для typedef'ed (void *)
.