用NSMutableData对象调用+ [NSData dataWithData:]是否可以?

时间:2011-07-26 20:03:03

标签: objective-c cocoa-touch nsdata nsmutabledata

对于我来说,更改可变数据实例不可变是否是一个问题?

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

2 个答案:

答案 0 :(得分:11)

这完全没问题,实际上是dataWithData:的主要用途之一 - 来创建可变对象的不可变副本。*

NSData也符合NSCopying protocol,**,这意味着您可以使用[mutData copy]。区别在于dataWithData:返回您不拥有的对象(它是自动释放的),而per memory management rulescopy创建一个对象,其 负责。 dataWithData:[[mutData copy] autorelease]等效。

因此,您可以选择dataWithData:copy,具体取决于您对生成对象生命周期的要求。


*这也适用于具有可变子类的其他类中的类似方法,例如+[NSArray arrayWithArray:]

**另请参阅“核心竞争力指南”中的"Object Copying"

答案 1 :(得分:4)

不,这不是问题。 immutableData将使用mutData中的数据进行初始化。