В первом случае я объявляю класс с одним атрибутом (метка UILabel *), а позже я объявляю свойства для этой метки.
Нет, вы не являетесь. В первом случае вы объявляете переменную экземпляра с именем label
и пару методов доступа, называемых -setLabel:
и -label
(известные вместе как свойство). У вас нет связи между свойством и переменной экземпляра. В настоящее время они являются независимыми сущностями.
Если вы сделаете это в реализации:
@synthesize label = fooBar;
Вы говорите, что методы собственности этикетки на самом деле используют совершенно другой переменный экземпляр обратно свойство.
Я всегда думал, что я должен объявить класс атрибуты
Я привык думать то же самое, но на самом деле, если вы синтезирование собственности, нет никакого смысла в объявлении Ивара отдельно, потому что @synthesize будет сделайте это за вас (и в ARC примените правильные квалификаторы собственности). Теперь я сделать что-то вроде этого:
@synthesize label = label_;
, так что я не использую переменную экземпляра, когда я имею в виду использовать свойство. например [label length]
флагов ошибки, когда я имел в виду [[self label] length]
Кроме того, если изменить реализацию свойства не использовать переменный экземпляр, если вы еще не объявлены переменная экземпляру явно, он уйдет и случайное использование этого (+ те, что указаны в init
и dealloc
) будут помечены как ошибки.
Возможный дубликат [Декларация собственности и автоматическое резервирование хранилища] (http://stackoverflow.com/questions/3238009/property-declaration-and-automatic-backing-storage-allocation) – outis
Ups! Сожалею!! :( – dpbataller