1

像这样设置 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!

为什么呢?

4

2 回答 2

4

dataWithCapacity只是在内存中保留了那么多字节,并不意味着数据是那个大小。

这方面的一个例子是从互联网接收图像时。预先您不知道图像会有多大,因此只需创建一个容量为 1MB 的 Data 对象,这样您就不需要在收到更多数据时不断调整数据大小。

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

于 2012-09-28T17:35:59.170 回答
3

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

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

于 2012-09-28T17:36:08.707 回答