Intereting Posts
Изменение цвета текста NSAttributedString без повторной установки заголовка Проблема при дифференциации метаданных для UILabel? Почему я не могу установить ограничения автоматической компоновки при добавлении ограничений в представление, которое я добавил в UIWindow? iOS, как программно имитировать два крана на uitextview? Как определить, есть ли ссылка в тексте UILabel и сделать ее кликабельной – Swift Календарь Kal в раскадровке в сочетании с Tabbar iOS App Store: как сохранить релиз после бинарной загрузки? Уникальное глобальное уникальное имя для изображений Как сохранить значение NSDictionary в NSArray? iOS Framework для интеграции автономных и онлайн-запросов Apache Solr О решении автономного режима для онлайн-видеосистемы HTML5 Firebase Crash Reporting, первый аргумент не похож на файл учетной записи службы iPad2 против iPad3 вручную позиционирует изменения? Статическая библиотека iOS не поддерживает 64-разрядную поддержку, как я могу заставить ее работать на 64-битном устройстве? retrieveConnectedPeripheralsWithServices и retrievePeripheralsWithIdentifiers возвращают пустой массив

В чем разница между следующими объявлениями свойств?

Каковы различия между ними?

  1. @interface { id value ) , No @property .

  2. @interface { id value ) , @property id value; и @synthesis value;

  3. @interface ( /* */ ) , id value в @implementation

  4. @interface ( /* */ ) , id value из @implementation

  5. другие, если вы считаете, что другие хорошие примеры

Заранее спасибо..

  1. Переменная экземпляра без компиляторов. К ним можно получить доступ непосредственно из класса, к нему можно получить доступ извне, только нарушая инкапсуляцию ( foo->value ).

  2. Обычное свойство класса (= переменная экземпляра с аксессуарами). Доступ к ним как из класса, так и снаружи с помощью аксессуаров может быть доступен непосредственно из класса.

  3. Если вы имеете в виду @implementation {id value;} , это переменная частного экземпляра. Очень похоже на (1), только переменная скрыта от общего заголовка. Это недавнее дополнение AFAIK.

  4. Не переменная класса, разделяемая всеми экземплярами.

Существует еще один вариант, свойство private class, объявленное в файле реализации:

 @interface YourClass () @property(retain) id foo; @end @implementation YourClass @synthesize foo; @end 

Это дает вам приятные сгенерированные компилятором аксессуры, не изменяя переменную в публичном заголовке. Чтобы обернуть вещи, я обычно использую обычные свойства (номер 2) для общедоступных вещей и свойств, объявленных в расширении класса (номер 5) для личных вещей.

Это переменная экземпляра (ivar):

 @interface sampleClass : superclass { NSUInteger sampleIvar; } 

Это частный iVar:

 @interface sampleClass : superclass { @private NSUInteger sampleIvar; } 

Это свойства:

 @property (nonatomic,copy) NSString *sampleCopiedProperty; @property (atomic,copy) NSString *sampleAtomicCopiedProperty; @property (nonatomic,retain) yourClass *sampleRetainProperty; @property (nonatomic,assign) BOOL sampleAssignProperty; 

Свойства – это iVars, у которых есть получатели и сеттеры, созданные компилятором. свойства экономят ваше время, уменьшая код шаблона и позволяя другим классам доступ к иварам вашего класса.

iVars имеет область файлов, свойства могут быть доступны из других объектов.

Примечание. Вы можете создавать свойства, а затем указывать имя сеттера, получателя и даже iVar.

Примечание. Если вы используете NSMutableArray, NSMutableDictionary и т. Д., Вы ДОЛЖНЫ записывать установщик самостоятельно и использовать mutableCopy иначе сгенерированный компилятором сеттер будет использовать copy для нового значения, которое приведет к не изменяемой версии.

в iOS 5.0 в дополнение к readOnly, атомному, неатомическому, копировать, сохранять, назначать и т. д. новое новое ключевое слово __weak будет добавлено к определениям свойств, которые помогут вам освободить память для циклических ссылок.