2012-06-26 4 views
1

Просто общий вопрос относительно разницы между расширением класса и его внедрением.Цель C - Разница между реализацией и расширением

@interface AppDelegate : UIResponder <UIApplicationDelegate> 

В моем примере моего класса AppDelegate простирается от UIResponder класса, но реализует класс UIApplicationDelegate.

Может кто-нибудь объяснить ... У вас также есть возможности доступа к методам объекта/класса UIApplicationDelegate? Где различия?

Благодаря

+0

UIApplicationDelegate не является классом, но протокол. – danyowdee

+0

ok ... протокол ... так что вы можете просто реализовать протоколы? – mogio

ответ

1

Если говорить в Java терминах, то в вашем примере вы расширяете (обычно называют подклассов) класса UIResponder.

Ваш пример также реализует UIApplicationDelegate, который аналогичен реализации интерфейса, в котором вы должны определить необходимые методы протокола UIApplicationDelegate, и у вас есть возможность реализовать необязательные методы.

Подобно Java, вы можете только продлить или подкласс один класс, но вы можете реализовать несколько протоколов делегат в своем классе

руководство компании Apple в Протоколах очень удобно, если вы хотите, чтобы понять больше: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html

+0

ahh .. ok получил это ... так что реализация означает просто привязать архитектурный план плана методов и других элементов к классу. .. правильно? – mogio

0

В на самом базовом уровне мы можем видеть эту форму для достижения множественного наследования в объекте C.

Поскольку только объектная C поддерживается единственной наследованием, но мы можем добиться множественного iinheritence с помощью протоколов (что аналогично интерфейсам в java).

Итак, когда мы подклассифицируем класс, то мы говорим, что мы расширяем это.

и когда мы используем протокол для доступа к общей функциональности (для того чтобы иметь множественное наследство) - мы говорим, что оно реализуется.

+0

Спасибо, риши ... – mogio

0

Расширение класса = подкласс. То есть методы, которые вы не переопределяете, будут вызываться в суперклассе.

Реализация протокола делегата просто говорит, какие методы предполагается реализовать вашему классу.

См (например) https://developer.apple.com/library/mac/#documentation/cocoa/conceptual/objectivec/Chapters/ocProtocols.html#//apple_ref/doc/uid/TP30001163-CH15-SW1

и

http://www.thepensiveprogrammer.com/2010/05/objective-c-protocols-and-delegates.html

+0

Спасибо, увестен ... Я проверю ваши ссылки – mogio

+0

... ok реализует средства для назначения интерфейса правил моему классу ... правильно? – mogio

+0

Думаю, вы могли бы так выразиться, да. В java-talk вы бы «реализовали интерфейс». – uvesten

Смежные вопросы