Переменные как в интерфейсе, так и в качестве свойства с использованием Objective-C - PullRequest
2 голосов
/ 01 июня 2011

В чем разница между

@interface URLCacheConnection : NSObject {
    id <URLCacheConnectionDelegate> delegate;
}

@property (nonatomic, assign) id delegate;
@end

и

@interface URLCacheConnection : NSObject {

}

@property (nonatomic, assign) id<URLCacheConnectionDelegate> delegate;
@end

Кажется, что оба этих определения классов ведут себя одинаково.Какова цель определения переменных как в интерфейсе, так и в качестве свойства?

Ответы [ 3 ]

5 голосов
/ 01 июня 2011

В чем разница между ...

Основным отличием является то, что в первом случае вы сможете увидеть delegate ивара в отладчике, а вво-вторых, вы этого не сделаете.

Какова цель определения переменных как в интерфейсе, так и в качестве свойства?

Это отчасти вопрос обратной совместимости.Способность синтезировать переменные экземпляра является относительно новой функцией Objective-C.Кроме того, всегда будет желательно иметь возможность создавать переменные экземпляра для внутреннего использования, которые не имеют соответствующего свойства.

4 голосов
/ 01 июня 2011

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

В более ранних версиях компилятора Apple Objective-C требовалось явно объявить свойство поддержки ivar, чтобы использовать @synthesize. В какой-то момент (я точно забыл, когда) они изменили его, чтобы компилятор / среда выполнения автоматически создавали необходимый ivar.

0 голосов
/ 01 июня 2011

Разница будет в реализациях. С первым вы можете @synthesize методы получения и установки и получите доступ к объявленной внутренней переменной.

Со вторым вам придется использовать @dynamic и кодировать геттеры и сеттеры, потому что нет внутренней переменной, для которой XCode может генерировать код.

Это мое чтение - рад узнать, что это не так.

Да - неправильно: - (

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