【问题标题】:Is it okay to call +[NSData dataWithData:] with an NSMutableData object?可以用 NSMutableData 对象调用 +[NSData dataWithData:] 吗?
【发布时间】:2011-07-26 20:03:02
【问题描述】:

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

NSMutableData *mutData = [[NSMutableData alloc] init];
//Giving some value to mutData
NSData *immutableData = [NSData dataWithData:mutData];
[mutData release];

【问题讨论】:

    标签: objective-c cocoa-touch nsdata nsmutabledata


    【解决方案1】:

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

    NSData 也符合NSCopying protocol,** 这意味着您可以改用[mutData copy]。区别在于dataWithData: 返回一个您不拥有的对象(它是自动释放的),而per memory management rulescopy 创建一个您 负责其内存的对象。 dataWithData: 等效于[[mutData copy] autorelease]

    因此您可以选择dataWithData:copy,具体取决于您对结果对象生命周期的要求。


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

    **另请参阅核心能力指南中的"Object Copying"

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-19
        • 2015-06-16
        相关资源
        最近更新 更多