In Objective-C, id<protocol> or NSObject<protocol>
are frequently used for delegate declaration.
What are the main differences between id and NSObject? When do you want to use one versus the other?
In Objective-C, id<protocol> or NSObject<protocol>
are frequently used for delegate declaration.
What are the main differences between id and NSObject? When do you want to use one versus the other?
id<protocol> obj
is the declaration for any object that conforms to the specified protocol.
You can send any message from the given protocol to the object (or from the protocols
that <protocol>
inherits from).
NSObject<protocol> *obj
is the declaration for any object that
NSObject
.That means that in the second case, you can send any methods from the NSObject
class
to the object, for example
id y = [obj copy];
which would give a compiler error in the first case.
The second declaration also implies that obj
conforms to the NSObject
protocol.
But this makes no difference if <protocol>
is derived from the NSObject protocol:
@protocol protocol <NSObject>