W Objective-C, id<protocol> or NSObject<protocol>
są często używane do deklaracji delegatów.Różnica między identyfikatorami <protocol> i NSObject <protocol>
Jakie są główne różnice między id a NSObject? Kiedy chcesz używać jednego kontra drugiego?
W Objective-C, id<protocol> or NSObject<protocol>
są często używane do deklaracji delegatów.Różnica między identyfikatorami <protocol> i NSObject <protocol>
Jakie są główne różnice między id a NSObject? Kiedy chcesz używać jednego kontra drugiego?
id<protocol> obj
jest deklaracją dla dowolnego obiektu zgodnego z określonym protokołem. Możesz wysłać dowolną wiadomość z podanego protokołu do obiektu (lub z protokołów , który dziedziczy po <protocol>
).
NSObject<protocol> *obj
jest zgłoszeniem dla każdego obiektu
NSObject
.Oznacza to, że w tym drugim przypadku można wysyłać żadnych metod z klasy NSObject
do obiektu, na przykład
id y = [obj copy];
która dałaby błąd kompilatora w pierwszym przypadku.
Druga deklaracja oznacza również, że obj
jest zgodny z NSObject
protokołem. Ale to nie ma znaczenia, jeśli <protocol>
pochodzi z protokołem NSObject:
@protocol protocol <NSObject>
Dzięki Martin. Czy identyfikator
@Boon: Nie. * "To nie ma znaczenia" * dotyczy tylko ostatniej części odpowiedzi, że zarówno "id
Mam to, dziękuję. – Boon
pomocna http://stackoverflow.com/questions/466777/whats-the-difference-between-declaring-a-variable-id- and-nsobject – Maulik
Nie jest to duplikat, ponieważ "' id' kontra 'NSObject *' "i" 'id" w porównaniu z NSObject * "" są znacząco różne. Głosowanie w celu ponownego otwarcia. –
Martin ma rację, to nie to samo. – Boon