使用字节填充NSMutableData会导致长度为零

时间:2012-09-28 17:32:01

标签: objective-c cocoa nsmutabledata

设置NSMutableData时:

NSMutableData* mRgb = [NSMutableData dataWithCapacity:3];
((char*)[mRgb mutableBytes])[0] = 10;
((char*)[mRgb mutableBytes])[1] = 90;
((char*)[mRgb mutableBytes])[2] = 160;

我遇到长度仍为0的问题:

int len = [mRgb length]; // Is 0!

为什么会这样?

2 个答案:

答案 0 :(得分:4)

dataWithCapacity只保留内存中的许多字节,但这并不意味着数据的大小。

这种情况的一个例子是从互联网接收图像。在前面你不知道图像有多大,所以只需创建一个容量为1MB的Data对象,这样你就不会在收到更多数据时不断调整数据大小。

您要使用的是dataWithLength方法,它从一开始就创建一个包含许多字节的数据对象。或者,您可以致电setLength:N来更改正在使用的数据量。

答案 1 :(得分:3)

dataWithCapacity:“......不一定立即分配请求的内存。可变数据对象根据需要分配额外的内存......”

使用dataWithLength:,它会分配和归零请求的数量。