Это совершенно нормально и фактически является одним из основных способов использования dataWithData:
- для создания неизменяемой копии изменяемого объекта. *
NSData
также соответствует NSCopying
протокол , ** что означает, что вы могли бы вместо этого использовать [mutData copy]
.Разница в том, что dataWithData:
возвращает объект, которым вы не владеете (он автоматически освобождается), тогда как по правилам управления памятью , copy
создает объект, для памяти которого вы несете ответственность ,dataWithData:
в действительности эквивалентен [[mutData copy] autorelease]
.
Таким образом, вы можете выбрать dataWithData:
или copy
, в зависимости от ваших требований к времени жизни полученного объекта.
* Это также относится к аналогичным методам в других классах, которые имеют изменяемый подкласс, например, +[NSArray arrayWithArray:]
.
** См. Также «Копирование объектов» в Руководстве по основным компетенциям.