NSString не является особенным;все объекты Какао следуют правилам управления памятью Какао .Пока у вас тоже все будет хорошо.
Мне сказали, что вызывать сохранение и освобождение константных строк безопасно, это правда?
Да,Вы должны обращаться с ними так же, как с любой другой строкой, которой вы не владеете: сохраните ее, если хотите иметь ее, или сделайте копию и владеете ею;затем обязательно освободите то, что у вас есть.
… стоит ли явно явно освобождать старое значение и сохранять значение substringToIndex
или можно просто использовать self.currentDiscountedPrice =
для обоих назначений?
Вы должны использовать свойство везде, но в init
методах и dealloc
.Это единственные методы, которые должны явно отправлять retain
и release
сообщения объекту в переменной экземпляра.
Причина для обеих сторон этого абзаца в том, что вы или подкласс можете реализовать пользовательскийаксессоры для собственности.Настраиваемое поведение может быть опасным, если оно запускается на полуинициализированном или полузаблокированном объекте, но вы, вероятно, захотите его везде.
Передача объекта константной строки в свойство не представляет опасностисеттер.Он сохранит или скопирует объект как обычно.
В этой заметке, когда значение свойства является объектом класса с изменяемым вариантом (поскольку NSString имеет NSMutableString), вы должны объявить свойство как копирующее его значение.(@property(copy)
или @property(nonatomic, copy)
), чтобы вы не брали в совместное владение чужой изменчивый объект.Если они видоизменяют объект, это может вызвать у вас проблемы, особенно если вы сохранили объект в коллекции хэширования (такой как ключ словаря), а не в переменной экземпляра.