对我来说,执行以下操作来改变可变数据实例是不可变的吗?可以用NSMutableData对象调用+ [NSData dataWithData:]吗?
NSMutableData *mutData = [[NSMutableData alloc] init];
//Giving some value to mutData
NSData *immutableData = [NSData dataWithData:mutData];
[mutData release];
对我来说,执行以下操作来改变可变数据实例是不可变的吗?可以用NSMutableData对象调用+ [NSData dataWithData:]吗?
NSMutableData *mutData = [[NSMutableData alloc] init];
//Giving some value to mutData
NSData *immutableData = [NSData dataWithData:mutData];
[mutData release];
不,这不是问题。 immutableData
将被初始化为mutData
中的数据。
这是完全没关系,而事实上是dataWithData:
的主要用途之一 - 创建一个可变对象的不变副本*
NSData
也符合NSCopying
protocol,**,这意味着你可以改为使用[mutData copy]
。不同的是,dataWithData:
返回一个你不拥有的对象(它是自动发布的),而per memory management rules,copy
创建一个对象,其对象的内存是是负责。 dataWithData:
相当于[[mutData copy] autorelease]
。
因此,您可以选择dataWithData:
或copy
,这取决于您对生成对象的生命周期的要求。
*这也适用于其他类的类似方法,其具有可变的子类,例如,+[NSArray arrayWithArray:]
。
**请参阅Core Competencies Guide中的"Object Copying"。