2013-08-02 3 views
3

Я немного смущен тем, что указываю сильную, копирующую или назначаю, а не указывая их. Мы не используем файлы NIB. Мой коллега всегда использовать следующее - он говорит IOS обнаруживает его и использовать его автоматически сильные, слабые и т.д.Правильный способ объявления свойств

@interface viewController : UIViewController 
    @property (nonatomic) UIImageView *imageView1; 
    @property (nonatomic) NSUInteger num; 
    @property (nonatomic) NSArray *array; 
@end 

Я предпочитаю следующий способ делать это.

@interface viewController : UIViewController 
    @property (nonatomic, strong) UIImageView *imageView1; 
    @property (nonatomic, assign) NSUInteger num; 
    @property (nonatomic, copy) NSArray *array; 
@end 

Какой лучше стиль программирования? Первый вариант всегда имеет сильный тип по умолчанию, но я всегда указываю их явно.

+1

Для любого свойства: atomic, readwrite и strong - значения по умолчанию. Следовательно, оба ваших варианта работают одинаково. Но всегда лучше, если coder сообщает компилятору, что назначить как свойство. – Mrunal

+0

Я должен был упомянуть, что я знаю, что сильный по умолчанию, так что технически оба они одинаковы, но я имею в виду и для других типов. Отредактированный вопрос. – applefreak

+0

Для них, как я уже сказал, всегда лучше, если разработчик/кодер явно сообщает компилятору и объявляет об этом. – Mrunal

ответ

3

Как указывалось в предыдущих ответах, в Objective C свойства являются по умолчанию

  • atomic, strong/retain, readwrite -> Для типов указателей
  • atomic, assign, readwrite -> Для примитивных типов

типы недвижимости weak, copy должен быть явно указан программистом, а в никак не принимается.

Что означает каждый

  • strong/retain привязанные объекты продолжают жить в памяти, пока не определено.
  • weak Объекты, на которые ссылаются, будут уничтожены, если нет сильной ссылки. Обычно используется для ссылки delegate объектов.
  • copy создаст неглубокую копию объекта, которому будет присвоена собственность.
  • assign/usafe_unretained (ARC) присваивает значение. Если используется в случае типов указателей, это небезопасное невыполнение задания указателя. В ARC обычно используют weak для типов указателей, потому что он сделает ivar=nil после того, как объект, на который ссылается объект weak, будет уничтожен. assign в этом случае приведет к оборванному указателю.

Лично я предпочитаю указывать типы собственности, даже если это strong по умолчанию. Это добавляет читаемость, что особенно удобно при профилировании приложения для утечек памяти или сбоев при отладке.

Вы можете узнать больше о properties here.

Надеюсь, что это поможет.

0

С ARC сильным является значение по умолчанию, так что они технически одинаковы. Из Transitioning to ARC Release Notes:

__strong is the default. An object remains “alive” as long as there is a strong pointer to it. 

Обратите внимание, что ARC будет НЕ автоматически определить, когда что-то должно быть слабыми, однако.

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

0

по умолчанию для собственности является strong и для переменной является __strong тоже. В вашем текущем примере рекомендовал собственности на самом деле было бы weak, но strong тоже приемлемо.

Для свойств непримитивов вы больше не должны использовать assign, а скорее unsafe_unretained. Практически они одинаковы, но последний позволяет вам знать, что вы используете объект небезопасно.

Свойство copy означает, что объект копируется (с использованием метода copy) и не сохраняется. Рекомендуется для таких классов, как NSString и NSArray, которые имеют изменяемые формы. Это связано с тем, что вы не хотите сохранять то, что считаете неизменной, но на самом деле меняете в другом месте.

Объявление свойства assign должно использоваться только для примитивных типов и структур, например. int и CGSize.

+0

Ваш текущий пример изменился, поэтому я поясню, что имел в виду объявление UIImageView. –

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