`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`).