Подтвердить что ты не робот

Можно ли вызвать + [NSData dataWithData:] с объектом NSMutableData?

Является ли проблемой для меня сделать следующее, чтобы изменить неизменяемый экземпляр изменяемых данных?

NSMutableData *mutData = [[NSMutableData alloc] init];
//Giving some value to mutData
NSData *immutableData = [NSData dataWithData:mutData];
[mutData release];
4b9b3361

Ответ 1

Это полностью нормально и на самом деле является одним из основных видов использования dataWithData: - для создания неизменяемой копии изменяемого объекта. *

NSData также соответствует протоколу NSCopying, что означает, что вместо этого вы можете использовать [mutData copy]. Разница в том, что dataWithData: возвращает объект, который у вас нет (он автореализован), тогда как для правил управления памятью, copy создает объект, за память которого вы несете ответственность. dataWithData: эквивалентно по значению [[mutData copy] autorelease].

Таким образом, вы можете выбрать dataWithData: или copy, в зависимости от ваших требований к времени жизни результирующего объекта.


* Это также относится к аналогичным методам в других классах, которые имеют изменяемый подкласс, например, +[NSArray arrayWithArray:].

** См. также "Копирование объектов" в Руководстве по основным компетенциям.

Ответ 2

Нет, это не проблема. immutableData будет инициализирован данными в mutData.