Объектная переменчивость

Большинство объектов Какао является непостоянным — значение, что можно изменить их инкапсулированные значения — но некоторые являются неизменными, и Вы не можете изменить их инкапсулированные значения после того, как они создаются. Основное преимущество неизменных объектов является обеспечением, что их значения не изменятся при использовании их. Как только Вы создаете неизменный объект, значение, которое он представляет, остается тем же в течение своей жизни во время выполнения. Но можно изменить инкапсулированное значение непостоянного объекта в любое время. Можно сделать это через методы, заменяющие значения (методы доступа «метода set») или методы, инкрементно изменяющие их.

Объектная переменчивость особенно важна с классами платформы Основы, представляющими наборы и примитивные типы данных. Эти классы имеют неизменные и непостоянные варианты, например NSArray и NSMutableArray, или NSData и NSMutableData. Непостоянный класс является подклассом неизменного класса и производит объект, представленное значение которого или, в случае классов набора, содержавшие значения могут быть изменены.

Art/object_mutability.jpg

Получение непостоянных объектов

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

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

Хранить непостоянные объекты

При разработке подкласса общее решение состоит в том, должны ли переменные экземпляра быть введены как непостоянный или неизменный вариант данного класса. Обычно, когда у Вас есть объект, содержание которого изменяет оптовую торговлю, лучше использовать неизменный объект. Строки (NSString) и объекты данных (NSData) обычно попадайте в эту категорию. Если объект, вероятно, изменится инкрементно, это - разумный подход для создания его непостоянным. Наборы, такие как массивы и словари попадают в эту категорию. Однако частота изменений и размер набора должны быть факторами в этом решении. Например, если у Вас есть маленький массив, редко изменяющийся, лучше сделать его неизменным.

Необходимые как условие статьи

Категорическое обсуждение