Что? В чем разница между использованием неформального протокола в NSObject или протокола с дополнительными методами?

Я изучаю некоторые основы неформальных протоколов и реальных протоколов. Что меня смущает, так это то, что Какао, кажется, использует много неофициальных протоколов для NSObject. Эти неформальные протоколы являются категориями в NSObject, которые объявляют методы, но фактически не реализуют их.

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

Одним из примеров является метод -awakeFromNib, определенный в NSNibLoading.h, который является неформальным протоколом для NSObject. Система загрузки пера проверяет во время выполнения, реализует ли объект этот метод. Если да, то он это вызывает.

Но теперь давайте представим, что не было функции, называемой неформальным протоколом. Альтернативой, которая имела бы точно такой же эффект, было бы реальное объявление @protocol, объявляющее необязательный метод -awakeFromNib. NSObject просто примет этот протокол, и компилятор с радостью предоставит автозаполнение.

Может ли кто-нибудь указать на большую разницу между этими двумя стратегиями? Не вижу смысла в неформальных протоколах, но очень хотел бы.

5
задан Proud Member 14 January 2011 в 10:31
поделиться

0 ответов