Как работает протокол для переменной экземпляра в Objective-C? - PullRequest
5 голосов
/ 20 марта 2009

В последнее время я вижу много кода, такого как следующий:

id<foo> aBar;

Обычно это то, что я вижу в объявлении класса, например:

@interface bar : UIViewController <UITableViewDelegate, UITableViewDataSource>

Означает ли вышесказанное, что aBar может быть экземпляром класса bar и обещает ли иметь все методы, объявленные в протоколе foo?

Ответы [ 2 ]

16 голосов
/ 20 марта 2009

Закрыть. Это означает, что aBar будет экземпляром класса, соответствующего протоколу foo. Это может быть bar (если этот класс соответствует foo) или другой класс, соответствующий foo. Все, что вы знаете из этой декларации, это то, что aBar соответствует протоколу.

Кроме того, они проверяются только во время компиляции, а не во время выполнения. В aBar можно поместить объект, который не является экземпляром класса, соответствующего foo. Но компилятор предупредит вас об этом в большинстве случаев.

0 голосов
/ 20 марта 2009

Точно. Протоколы означают, что вы не наследуете класс, а получаете прототипы методов этого класса. Таким образом, вы будете знать, что такое заглушки методов, когда вы пытаетесь взаимодействовать с объектом, который требует эти методы. Подумайте о поверхностном интерфейсе в C #.

Я говорю на C #, потому что это мой основной язык. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...