2013-05-06 2 views
0

Я знаю, что я могу определить delgate в моей .h файле следующим образом:Декларация делегата Objective-C без протокола?

@property (nonatomic, weak) id <MyClassDelegate> delegate; 

и я нашел это заявление тоже работает:

@property (nonatomic, weak) id delegate; 

Я использую Xcode 4.6 и Lastest SDK. Мой вопрос: будет ли компилятор автоматически искать «MyClassDelegate» в файле .h?

+1

Я думаю, у вас есть опечатка - оба объявления свойств идентичны. – rmaddy

+0

, потому что код не был отформатирован как код '' был скрыт – vikingosegundo

+0

Обратите внимание, что до последних нескольких лет делегаты вообще не объявлялись протоколами. Современный стандарт включался добавлением ключевых слов '@ optional' и' @ required' для объявления необязательных и необходимых методов в протоколе. До этого * все методы были необходимы *, что делало протоколы непригодными для объявления делегатов. – bbum

ответ

1

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

Первый путь, компилятор будет идти и найти протокол (вы должны импортировать какой файл .h он определен в), а затем он будет проверять, что:

  1. где-нибудь делегат устанавливается, экземпляр будучи набор реализует протокол
  2. везде, где используется делегат, вы вызываете известный способ на нем

Второй путь, компилятор не делает никаких проверок вообще и оставляет все, чтобы во время выполнения.

Протокол не обязательно должен быть определен в файле с определенным именем, его просто нужно определить в файле, в котором вы пытаетесь его использовать, или в файле, который он определен, должен быть #import ред.

+0

Малый вопрос: это определение свойства, а не переменной экземпляра per se. – Chuck

1

У вас может быть формальное делегирование (ваша 1-я версия) с использованием протокола и неофициальная передача без протокола (ваша вторая версия). Оба синтаксически правильны.

+0

Спасибо! Reinhard. – user2348456

+0

Мое удовольствие! Рад, что это помогло. –

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