执行以下操作将可变数据实例更改为不可变对我来说有问题吗?
NSMutableData *mutData = [[NSMutableData alloc] init];
//Giving some value to mutData
NSData *immutableData = [NSData dataWithData:mutData];
[mutData release];
最佳答案
这完全没问题,实际上是 dataWithData:
的主要用途之一:创建可变对象的不可变副本。*
NSData
也符合 NSCopying
protocol ,** 这意味着您可以改为使用 [mutData copy]
。不同之处在于 dataWithData:
返回一个您不拥有的对象(它是自动释放的),而 per memory management rules , copy
创建一个对象,您 负责其内存。 dataWithData:
等效于 [[mutData copy] autorelease]
。
因此,您可以选择 dataWithData:
或 copy
,具体取决于您对结果对象生命周期的要求。
*这也适用于具有可变子类的其他类中的类似方法,例如,+[NSArray arrayWithArray:]
。
**另见 "Object Copying"在核心能力指南中。
关于objective-c - 可以调用 +[NSData dataWithData :] with an NSMutableData object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835884/