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 に答える