In observeValueForKeyPath:ofObject:change:context:
- why do the docs use NULL
instead of nil
when not specifying a context pointer?
nil
should only be used in place of an id
, what we Java and C++ programmers would think of as a pointer to an object. Use NULL
for non-object pointers.
Look at the declaration of that method:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
Context is a void *
(ie a C-style pointer), so you'd definitely use NULL
(which is sometimes declared as (void *)0
) rather than nil
(which is of type id
).
context
in observeValueForKeyPath:ofObject:change:context:
is void *
, doesn't that mean that the data passed as the context
could be an object pointer? I would think that to be a common case. That's why I'm confused as to why the docs always use NULL
instead of nil
. –
Immunology nil
) when we pass this message to the object implementing NSKeyValueObserving? Because object pointers cannot be of type void *
? –
Immunology They're technically the same thing (0), but nil is usually used for an Objective-C object type, while NULL is used for c-style pointers (void *).
NULL
is differently defined than nil
. nil
is defined as (id)0
. NULL
isn't. –
Heavyweight They're technically the same thing and differ only in style:
- Objective-C style says
nil
is what to use for theid
type (and pointers to objects). - C style says that
NULL
is what you use forvoid *
. - C++ style typically says that you should just use
0
.
I typically use the variant that matches the language where the type is declared.
NULL
is the C equivalent
of nil
, a pointer to nothing;
where nil is zero typed as id
,
NULL is zero typed as void*
.
One important point you can’t send a message to NULL. So it is preferred to use nil in objective-C at many places.
They almost are the same thing except,
nil
is used in an Objective-C style.
where NULL
is for C type pointers and is typdef'ed to (void *)
.
© 2022 - 2024 — McMap. All rights reserved.