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

Jac*_*ess 13 cocoa-touch objective-c nsdata nsmutabledata

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

NSMutableData *mutData = [[NSMutableData alloc] init];
//Giving some value to mutData
NSData *immutableData = [NSData dataWithData:mutData];
[mutData release];
Run Code Online (Sandbox Code Playgroud)

Jos*_*ell 11

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

NSData也符合NSCopying协议,**这意味着你可以改为使用[mutData copy].不同的是,dataWithData:返回你不拥有一个对象(它会被自动释放),而每个内存管理规则,copy创建一个对象,它的内存,你负责的.dataWithData:等效于[[mutData copy] autorelease].

因此,您可以选择dataWithData:或者copy,根据您对生成的对象的生命周期的要求.


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

**另请参阅"核心能力指南"中的"对象复制".


小智 4

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