Не могу понять геттер / сеттер с объектом - PullRequest
1 голос
/ 01 декабря 2010

Понятие сеттера / геттера для простых данных легко понять, например, NSInteger.

Если мы скажем: NSInteger a;

Установщик для "a" изменяет значение a, а получатель только получает (возвращает) его значение. Тогда легко понять атомарную / неантомическую концепцию, поскольку atomic гарантирует, что чтение «a» при изменении a всегда будет возвращать целое значение (геттер и сеттер синхронизированы).

Но я не совсем понимаю, что это setter и getter для свойств, которые являются указателями на объекты (например, NSData *, NSString *). Скажем, например, NSMutableData:

Если мы скажем: NSMutableData * m_my_mutable;

Представьте, что у меня есть сеттер setMyMutable и getMyMutable для этого свойства, которое принадлежит моему объекту MyObject. Если я сделаю это, то я вызову метод получения (поскольку я получаю объект до добавления данных):

[[MyObject getMyMutable] appendData ....]

но appendingData также изменит его, поэтому разве это не должно рассматриваться как действие сеттера? Или установщик относится только к факту инициализации значения (которое может быть сохранено, например).

В этом понятии я должен что-то упустить.

Спасибо Apple92

Ответы [ 2 ]

2 голосов
/ 01 декабря 2010

Сеттер устанавливает значение свойства.Когда вы устанавливаете целочисленное свойство, новое целочисленное значение сохраняется.Когда вы устанавливаете свойство объекта, новый объект сохраняется.appendData: не изменяет свойство - оно меняет сам объект данных .Атомарное свойство гарантирует только то, что свойство содержит какое-либо полное значение или другое - оно не влияет на то, что вы делаете с объектом внутри свойства.

Между прочим, наличие изменяемого состояния (такого как объект NSMutableData)доступ вне объекта владения почти всегда плохая идея.Как только вы это сделаете, становится слишком легко иметь несколько объектов, пытающихся внести свои собственные изменения и растоптать друг друга.

0 голосов
/ 01 декабря 2010

Настройка действительно относится только к инициализации.Вот почему атомарности недостаточно, чтобы гарантировать, что изменяемые структуры данных являются поточно-ориентированными.Вместо этого вы получаете гарантию, что объект будет заменен или прочитан одним махом, поэтому вам не придется выполнять частичные назначения.

...