NSMutableData的mutableBytes和bytes方法之间的区别

时间:2012-03-17 03:15:05

标签: objective-c byte nsmutabledata

两者都返回相同的指针。我知道- bytes属于NSData,为什么NSMutableData会引入- mutableBytes?它只是为了代码清晰度,所以更明显的是你访问可变数据?使用哪一个真的很重要吗?

NSMutableData* mydata = [[NSMutableData alloc] init];
[mydata appendData: [@"hello" dataUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"%p", [mydata mutableBytes]);
NSLog(@"%p", [mydata bytes]);

感谢。

2 个答案:

答案 0 :(得分:3)

NSMutableData可能提供单独的mutableBytes方法有几个原因:

  • 正如您在问题中所建议的那样,使用mutableBytes会让读者明白您想要更改数据。

  • bytes方法返回const void *mutableBytes方法返回void *。如果要更改字节,则需要void *而不需要const限定符。 mutableBytes方法无需丢弃const限定符。

理论上可能有第三个原因:-[NSData mutableCopy]方法可以返回指向与原始NSMutableData相同的缓冲区的NSData,并且只创建一个新的可变副本调用mutableBytes时的缓冲区。但是,基于我非常有限的测试,我不认为它是以这种方式实现的。

答案 1 :(得分:0)

rob's answer的一个补充和他的评论:

  

@Dabbu NSData和NSMutableData将它们的内容存储为一个连续的内容   字节数组。

这里要记住的是iOS7中的这种行为已经改变了:现在NSData / NSMutableData不能保证将内容保持为一个连续的数组。它可以存储为多个块。

因此,当您调用bytes / mutableBytes时,如果需要,它们会将内容复制并压缩为一个连续的字节数组,然后返回指向此连续块的指针。

根据您尝试执行的操作,可能会导致意外的性能损失或大型缓冲区的内存消耗过多。

相关问题