В observeValueForKeyPath:ofObject:change:context:
- почему документы используют NULL
вместо nil
указания контекста?
objective-c
cocoa
null
erikprice
источник
источник
Ответы:
nil
следует использовать только вместо тогоid
, что мы, программисты на Java и C ++, считаем указателем на объект. использованиеNULL
для не объектных указателей.Посмотрите на объявление этого метода:
Контекст является
void *
(то есть указателем в стиле C), поэтому вы определенно должны использоватьNULL
(который иногда объявляется как(void *)0
), а неnil
(который имеет типid
).источник
context
inobserveValueForKeyPath:ofObject:change:context:
isvoid *
, не означает ли это, что данные, передаваемые как,context
могут быть указателем на объект? Я думаю, что это частый случай. Вот почему я не понимаю, почему документы всегда используютNULL
вместоnil
.Технически это одно и то же (0), но nil обычно используется для типа объекта Objective-C, а NULL используется для указателей в стиле c (void *).
источник
NULL
определяется по-другому, чемnil
.nil
определяется как(id)0
.NULL
нет.Технически они одно и то же и отличаются только стилем:
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 *)
.источник