如何初始化NSData以存储MAX_SIZE_BUFFER字节?

时间:2010-10-14 16:48:21

标签: objective-c initialization buffer nsdata

我刚刚意识到我在Xcode NSData Class中搜索了30分钟如何在objc中执行此操作(对不起,我在C中解释这个,因为这是唯一没有考虑太多的语言):

#define MAX_SIZE_BUFFER 500
byte *ptr;
ptr = malloc(MAX_SIZE_BUFFER * sizeof(byte));
memset(ptr, 0, MAX_SIZE_BUFFER);

我开始像这样编码,但从未发现如何初始化MAX_SIZE_BUFFER并以智能方式将所有字节设置为0:

#define MAX_SIZE_BUFFER 500
NSData *ptr
ptr = [[[NSData] alloc] init]; // impossible to specify MAX_SIZE_BUFFER in the allocation.

因此我告诉自己,让我们使用类方法:

+ data
+ dataWithBytes:length:
+ dataWithBytesNoCopy:length:
+ dataWithBytesNoCopy:length:freeWhenDone:
+ dataWithContentsOfFile:
+ dataWithContentsOfFile:options:error:
+ dataWithContentsOfMappedFile:
+ dataWithContentsOfURL:
+ dataWithContentsOfURL:options:error:
+ dataWithData:

但是没有一个能够完成alloc和空白init。

例如:+ dataWithBytes:length:要求创建备用C缓冲区并将其作为方法的参数给出。

我应该认为自己像个白痴,还是像个坏的程序员?

说真的,你有一个聪明而简单的方法吗?

Apple92

1 个答案:

答案 0 :(得分:6)

NSData是不可变的,因此所有初始值设定项都需要缓冲区的内容。你想要的是NSMutableData的initWithLength:

http://developer.apple.com/library/ios/#documentation/cocoa/reference/foundation/Classes/NSMutableData_Class/Reference/NSMutableData.html