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