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

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

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

2 ответа

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

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

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


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

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

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

Другие вопросы по тегам