我是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];
工作正常。 是什么原因 ?它们之间有什么区别,哪个更好用?
答案 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
分配的内存块。