Протоколы и делегаты [дубликаты]

Возможный дубликат:
Что разница между уведомлениями, делегатами и протоколами?

Я новичок в Objective C. Хотелось бы в нескольких словах понять концепцию Protocols и Delegates. Например, в какой ситуации я должен рассмотреть возможность объявления Protocol, а затем использовать его в своих классах в качестве делегатов или позволить другим классам использовать его.

Вместо Protocols почему я не могу заставить свои классы выполнять ту же работу?

Спасибо за ваше время.


person XMarshall    schedule 29.09.2011    source источник


Ответы (1)


Протоколы похожи на контракты. Ваш класс должен реализовывать все методы, которые являются @required, @Optional, с другой стороны, не требуются.

Вместо протоколов, почему я не могу заставить свои классы выполнять ту же работу? Вы можете, но, как я уже писал выше, это контракт. Вы знаете этот класс

реализует (обязательные) методы.

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

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

@property (assign) id<yourProtocol> delegate;

Обратите внимание, что вы не сохраняете своего делегата. Вы (слабая) ссылка, потому что не хотите попасть в круг удержания (A сохраняет B, а B сохраняет A).

Надеюсь, мое объяснение немного помогло.

person Konrad77    schedule 29.09.2011