dataWithBytes,dataWithBytes和initWithBytes有什么区别?

时间:2015-01-26 23:32:45

标签: ios objective-c

我是iOS编程的新手。我有一个带签名的功能

(NSData*) Decrypt;

在函数中我必须从char *缓冲区构建NSData *,我正在尝试这三个函数。

NSData *returnData = [[NSData alloc] initWithBytes:buffer length:buflength];
NSData *returnData = [NSData dataWithBytes:buffer length:buflength];
NSData *returnData = [NSData dataWithBytesNoCopy:buffer length:buflength];

return returnData;

此外,此代码也有效。

return [NSData dataWithBytesNoCopy:buffer length:buflength]

之外的所有内容
NSData *returnData = [NSData dataWithBytesNoCopy:buffer length:buflength];

工作正常。 是什么原因 ?它们之间有什么区别,哪个更好用?

1 个答案:

答案 0 :(得分:2)

[[NSData alloc] initWithBytes:buffer length:buflength][NSData dataWithBytes:buffer length:buflength] 是相同的,第二个只是第一个的简写。这些方法创建一个包含从buflength字节复制的buffer个字节的数据对象。

[NSData dataWithBytesNoCopy:buffer length:buflength]创建一个数据对象,该对象保存buflength个字节中的buffer个字节。返回的对象获取buffer指针的所有权,并在释放时释放它。因此,buffer必须指向使用malloc分配的内存块。