objective-c - 可以调用 +[NSData dataWithData :] with an NSMutableData object?

标签 objective-c cocoa-touch nsdata nsmutabledata

执行以下操作将可变数据实例更改为不可变对我来说有问题吗?

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/

相关文章:

ios - 当 NSData 属性为 nil 时 Realm 崩溃

ios - 比较 NSData 对象的创建/修改日期

string - StringWithData 的正确语法是什么?

ios - 从 UIView 层次结构创建 UIImage 时背景透明度丢失

ios - 我们可以在某个时间或事件后更改通知的内容吗?

cocoa-touch - 如何检测 iOS 7 中麦克风输入权限被拒绝

iphone - 如何在 iOS 中以编程方式重启或重新加载 iPhone 应用程序

ios - Objective C <Custom UI> 共享扩展取消按钮

ios - 可以皮肤 iPhone 主(桌面)界面/背景吗?

iphone - 使用 CATransform3DRotate 时的抗锯齿线