Закрыть. В Objective C вы указываете, что объект реализует протокол с угловыми скобками <>, поэтому вы должны написать свой метод, например, один из следующих:
- (void) someMethod: (id <CoolProtocol>) obj { }
- (void) someMethod: (id <NSObject, CoolProtocol>) obj { }
- (void) someMethod: (NSObject <CoolProtocol> *) obj { }
Во всех случаях вы говорите, что someMethod требует объект, который реализует CoolProtocol.
id - это общий указатель на любой объект Objective C.
То есть id означает «Любой объектный объект C, который реализует CoolProtocol».
Зачастую вы хотите иметь возможность сохранять / освобождать / автоматически освобождать объект и обычно обрабатывать его как обычный объект Какао, поэтому часто полезно также добавить протокол NSObject, как это делает второй случай.
И если вы хотите убедиться, что это действительно правильный объект Какао (исключая объекты на основе NSProxy), то вы можете использовать последнюю форму, которая в основном говорит: «Я хочу любой реальный объект Какао Objective C, который реализует CoolProtocol».