1) @property - это особый способ определения методов получения и установки, или, как мы их называем, методов доступа в Objective-C. Ваш первый фрагмент просто объявляет массив, для которого вы должны объявить и написать методы доступа самостоятельно. Например setMyArray:
и myArray
.
Использование @property объявит ваши средства доступа для вас и эквивалентно объявлению setMyArray:
и myArray
самостоятельно. Это предпочтительный способ объявить средства доступа начиная с Objective-C 2.0. Обратите внимание, что вы все равно должны объявить свойство (в вашем случае myArray) самостоятельно.
2) Сначала вам нужно узнать о @synthesize. Помните, что @property ОБЪЯВЛЯЕТ средства доступа для вашей собственности, @synthesize их ОСУЩЕСТВЛЯЕТ. Когда вы используете @property в своем @interface, вы, скорее всего, пишете @synthesize в @implementation. Использование @synthesize эквивалентно реализации setMyArray:
и myArray
.
Атрибуты (nonatomic, retain)
сообщают компилятору, среди прочего, как должно работать управление памятью и, следовательно, как будут реализованы методы. Обратите внимание, что вы никогда не увидите эти средства доступа, но будьте уверены, что они есть и готовы к использованию.
Чтобы узнать больше по этой теме, я рекомендую прочитать Раздел 9, посвященный свойствам, из следующего Учебного пособия или купить Книгу , в которой содержится введение в Objective-C.
Также вам следует ознакомиться хотя бы со следующими атрибутами:
- Доступ
- Выберите
readwrite
(по умолчанию) или readonly
. Если установлено readonly
, будут доступны ТОЛЬКО методы получения.
- Setter Memory Management
assign
(по умолчанию), просто присваивает новое значение. Скорее всего, вы используете это только с примитивными типами данных.
retain
, освобождает старое значение и сохраняет новое. Если вы используете сборщик мусора, retain
эквивалентно assign
. Зачем? Ручное удаление старого значения будет выполнено сборщиком мусора.
copy
скопирует новое значение и освободит старое значение. Это часто используется со строками.
- Threading
atomic
(по умолчанию) гарантирует, что метод установки является атомарным. Это означает, что только один поток может получить доступ к сеттеру одновременно.
nonatomic
, используйте это, когда вы не работаете с потоками.
Этот пост дает хорошее представление об управлении памятью и assign
, retain
и copy
.