Intereting Posts
Методы делегатов UITextView не запускаются Замена объекта в словаре в массиве Внешний вид UITabBarItem для UIControlStateHighlighted Как отклонить контроллер модального просмотра с помощью UIAlertView? Сервер MICROSOFT SQL и windows azure с Mac OS X и Cocoa Как передавать информацию между двумя UIViewControllers в a в UITabBarController Я установил цель развертывания в iOS8, и в App Store говорится: «Совместимость: требуется iOS 7.0 или новее». Могу ли я заставить приложение устанавливать только в iOS8? Есть ли способ ограничить максимальный уровень масштабирования MKMapView? Профиль предоставления распределения не включает право на получение прав на получение заданий Является ли выполнение вычислений внутри cellForRowAtIndexPath тяжелым? Получите массив альбомов facebook в быстром использовании Facebook SDK 4.1 UITabBarController без UITabBar ExecutionEngineException: попытка JIT-метода компиляции 'System.Collections.Generic.Dictionary' Как отключить SWRevealViewController в одном UIViewController Сохранить отправлено на освобожденный UIViewController

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

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

  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 будет добавлено к определениям свойств, которые помогут вам освободить память для циклических ссылок.