对于我来说,更改可变数据实例不可变是否是一个问题?
NSMutableData *mutData = [[NSMutableData alloc] init];
//Giving some value to mutData
NSData *immutableData = [NSData dataWithData:mutData];
[mutData release];
答案 0 :(得分:11)
这完全没问题,实际上是dataWithData:
的主要用途之一 - 来创建可变对象的不可变副本。*
NSData
也符合NSCopying
protocol,**,这意味着您可以使用[mutData copy]
。区别在于dataWithData:
返回您不拥有的对象(它是自动释放的),而per memory management rules,copy
创建一个对象,其 负责。 dataWithData:
与[[mutData copy] autorelease]
等效。
因此,您可以选择dataWithData:
或copy
,具体取决于您对生成对象生命周期的要求。
*这也适用于具有可变子类的其他类中的类似方法,例如+[NSArray arrayWithArray:]
。
**另请参阅“核心竞争力指南”中的"Object Copying"。
答案 1 :(得分:4)
不,这不是问题。 immutableData
将使用mutData
中的数据进行初始化。