В чем разница между alloc, copy и new? - PullRequest
4 голосов
/ 27 мая 2011

Какова действительная разница между alloc, copy и new, а также насчет присвоения и неатомического свойства.

1 Ответ

5 голосов
/ 27 мая 2011
  • Alloc

alloc - это селектор класса (например, называется like)

[NSObject alloc]

Возвращает неинициализированный указатель типа NSObject *.

  • Init

Чтобы завершить инициализацию, вы должны вызвать соответствующий назначенный инициализатор для самого экземпляра :

[[NSObject alloc] init]

Возвращает полезный указатель NSObject *.

  • новый

Новое в основном делает alloc -> init, за исключением того, что оно вызывается непосредственно на уровне класса:

NSObject* aObj = [NSObject new]
NSObject* aObj = [[NSObject alloc] init]

похожи.

  • неатомической

Неатомарное свойство означает, что когда свойство будет записано (например, во время вызова набора), не будет добавлена ​​блокировка к переменной, синтезированной этим свойством (это означает, что @synchronize не тратит слишком много времени).

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

  • копия

Свойство copy означает, что при изменении этого свойства, например:

aObj.copyProperty = otherValue

Переменная copyProperty отправит сигнал copyWithZone: объекту otherValue .

Другими словами, если ваш copyProperty совместим с протоколом NSCopying , он в конечном итоге будет иметь те же свойства, что и otherValue , но будет иметь свой собственный адрес и сохранить счет и, следовательно, находиться в совершенно другой части памяти, как было otherValue .

В основном copyProperty будет занимать столько же памяти места, сколько otherValue .

  • присвоить

Назначение свойства означает, что когда вы делаете:

aObj.prop = aProperty

Переменная, синтезируемая свойством prop , будет напрямую присвоена aProperty, что означает, что они будут иметь точный тот же адрес И сохранят количество .

Нет дополнительного пространства памяти занято при использовании команды assign.

Надеюсь, это поможет вам. Для получения дополнительной информации, пожалуйста, прочитайте Документация по управлению памятью Apple

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...