Как реализован сеттер присвоения свойства assign? - PullRequest
1 голос
/ 03 ноября 2011

Проверяет ли реализация сеттера сначала, отличается ли новое значение от старого, перед присвоением ivar нового значения?

Существует ли ссылка на документацию (или исходный код), которая показывает всеразличные перестановки (в зависимости от атрибутов, assign, retain и т. д.) того, как синтезируется свойство?

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

Я не могу себе представить, что установщик присваивания сначала проверяет предыдущие значения. Это было бы полной тратой циклов ЦП, так как результат будет одинаковым в любом случае. В документации явно указана семантика различных атрибутов, но она не показывает точно, какой код синтезирован.

1 голос
/ 03 ноября 2011

Документация Objective-C объясняет это. Детали того, что на самом деле происходит, зависят от реализации.

копия
Указывает, что копия объекта должна использоваться для назначение. Предыдущее значение отправляется сообщение о выпуске. Копия сделано путем вызова метода копирования. Этот атрибут действителен только для типы объектов, которые должны реализовывать протокол NSCopying.

присвоить
Указывает, что сеттер использует простое присваивание. Этот атрибут по умолчанию. Вы используете этот атрибут для скалярных типов, таких как NSInteger и CGRect.

сохранить
Указывает, что retain должен вызываться на объект при назначении. Предыдущее значение отправляется сообщение о выпуске.

...

неатомический
Указывает, что средства доступа не являются атомарными. По умолчанию методы доступа являются атомарными.

...

[_internal lock]; // lock using an object-level lock
id result = [[value retain] autorelease];
[_internal unlock];
return result;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...