Можно ли вызывать +[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
,