Ответ Питерса великолепен. Но я бы хотел добавить одну вещь. Если вы добавите протокол «NSObject» к своему протоколу
@protocol CoolProtocol <NSObject>
@end
, это избавит вас от необходимости объявлять протокол NSObject в объявлении метода.
- (void) someMethod: (id <NSObject, CoolProtocol>) obj { }
Теперь становится
- (void) someMethod: (id <CoolProtocol>) obj { }
Закрыть. В Objective C вы указываете, что объект реализует протокол с помощью угловых скобок <>, поэтому вы должны написать свой метод как один из следующих:
- (void) someMethod: (id <CoolProtocol>) obj { }
- (void) someMethod: (id <NSObject, CoolProtocol>) obj { }
- (void) someMethod: (NSObject <CoolProtocol> *) obj { }
Во всех случаях вы говорите, что someMethod требует объект, реализующий CoolProtocol.
] id - это общий указатель на любой объект Objective C.
Итак, id