执行以下操作来更改可变数据实例不可变对我来说是否有问题?
NSMutableData *mutData = [[NSMutableData alloc] init];
//Giving some value to mutData
NSData *immutableData = [NSData dataWithData:mutData];
[mutData release];
执行以下操作来更改可变数据实例不可变对我来说是否有问题?
NSMutableData *mutData = [[NSMutableData alloc] init];
//Giving some value to mutData
NSData *immutableData = [NSData dataWithData:mutData];
[mutData release];
这完全没问题,实际上是dataWithData:
-- 创建可变对象的不可变副本的主要用途之一。*
NSData
也符合NSCopying
协议,** 这意味着您可以改用[mutData copy]
. 不同之处在于dataWithData:
返回一个您不拥有的对象(它是自动释放的),而根据内存管理规则,copy
创建一个您负责其内存的对象。dataWithData:
等效于[[mutData copy] autorelease]
。
因此,您可以选择dataWithData:
或copy
,这取决于您对生成对象的生命周期的要求。
*这也适用于具有可变子类的其他类中的类似方法,例如+[NSArray arrayWithArray:]
.
**另请参阅核心能力指南中的“对象复制”。
不,这不是问题。immutableData
将使用 中的数据进行初始化mutData
。