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

use*_*607 4 buffer initialization objective-c 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);
Run Code Online (Sandbox Code Playgroud)

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

#define MAX_SIZE_BUFFER 500
NSData *ptr
ptr = [[[NSData] alloc] init]; // impossible to specify MAX_SIZE_BUFFER in the allocation.
Run Code Online (Sandbox Code Playgroud)

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

+ data
+ dataWithBytes:length:
+ dataWithBytesNoCopy:length:
+ dataWithBytesNoCopy:length:freeWhenDone:
+ dataWithContentsOfFile:
+ dataWithContentsOfFile:options:error:
+ dataWithContentsOfMappedFile:
+ dataWithContentsOfURL:
+ dataWithContentsOfURL:options:error:
+ dataWithData:
Run Code Online (Sandbox Code Playgroud)

但是没有一个能够实现alloc和blank init.

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

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

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

Apple92

Dan*_*son 6

NSData是不可变的,因此所有初始化程序都需要缓冲区的内容.你想要的是NSMutableData的initWithLength:

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