Можно ли вызывать + [NSData dataWithData:] с объектом NSMutableData? - PullRequest
13 голосов
/ 27 июля 2011

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

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

Ответы [ 2 ]

11 голосов
/ 27 июля 2011

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

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

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


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

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

4 голосов
/ 27 июля 2011

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

...