Відповіді:
nil
слід використовувати лише замість того id
, що ми, програмісти Java та C ++, вважали вказівником на об’єкт. Використовувати NULL
для не об’єктних покажчиків.
Подивіться на декларацію цього методу:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
Контекст - це void *
(тобто вказівник у стилі С), тому ви неодмінно використовуєте NULL
(який іноді оголошується як (void *)0
), а не nil
(який має тип id
).
context
in observeValueForKeyPath:ofObject:change:context:
є void *
, чи не означає це, що дані, передані як дані, context
можуть бути вказівником об'єкта? Я думаю, що це звичайний випадок. Ось чому я плутаюся, чому документи завжди використовуються NULL
замість nil
.
Технічно це те саме (0), але нуль зазвичай використовується для типу об'єкта 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
використовується в стилі Objective-C. де NULL
призначено для покажчиків типу С і вводиться до них (void *)
.