Ответы:
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).
contextin 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 *).