Почему неизменяемые объекты имеют простое управление памятью в Какао? - PullRequest
2 голосов
/ 14 марта 2011

В курсе Пола Хегарти он рекомендует использовать неизменяемые объекты из соображений управления памятью. Однако я не смог найти причину этого.

Итак, почему неизменяемый объект предпочтителен по причинам управления памятью?

Ответы [ 2 ]

6 голосов
/ 15 марта 2011

Основная причина заключается в том, что операция copy для неизменяемых объектов на самом деле является псевдонимом для retain (или, при сборке мусора, запретом операций).Это верно, потому что при правильном использовании неизменяемых объектов вы не можете наблюдать разницу между оригиналом и копией, кроме как путем сравнения указателей.

Это важно, потому что «объекты-значения», такие как строки,часто копируется, чтобы точно избежать ситуации, которую описывает Кенни Уайлэнд.Если у вас есть свойство, объявленное @property (copy) NSString *foo, присвоение ему неизменяемой строки сохранит его без значительных накладных расходов, а присвоение ему изменяемой строки скопирует его, чтобы избежать его изменения за спиной получателя.

0 голосов
/ 14 марта 2011

По моему опыту, это не технически лучше для целей управления памятью ЕСЛИ вы знаете, как правильно управлять памятью.Я предполагаю, что он предлагает это для новых разработчиков какао, потому что это по сути поможет им избежать некоторых ловушек, связанных с памятью.

Например, если у вас есть класс A, который имеет член NSString * myString ... тогда есливы создаете NSMutableString * mutable и устанавливаете A.myString = mutable .... автор класса A будет ожидать, что myString не изменится, но, поскольку он на самом деле изменяемый, он может.Поэтому он может предложить это, чтобы новые разработчики избегали попадания в ногу.

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

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