什么是Marshal.Copy的Objective-C等价物



我正在将一个项目从Xamarin(C#(重写为Native-iOS(Objective-C(。我的问题是如何将Marshall.Copy重写为Objective-C?我们是否有一个具有相同功能的库?

哈马林

public void notifyCallBack(IntPtr someData, uint dataLength) {
// Marshal data
byte[] dataBuffer = new byte[dataLength];
Marshal.Copy(someData, dataBuffer, 0, (int) dataLength);
}

原生 iOS

void notifyCallBack(char* someData, uint dataLength) {
//Marshal data
unsigned char dataBuffer[sDataLen];
???

}

如果您需要一个新的数据缓冲区,其中包含传递数据的副本,是的,您可以按照人们的建议进行操作 - 制作一个 char[] 缓冲区并做一个 memcpy,但这是一个纯粹的 C 方式(尽管纯 C 没有错(。

Objective-C 的方法是使用 NSData(或者 NSMutableData,如果你希望它是可写的(:

NSMutableData *dataBuffer = [NSMutableData dataWithBytes:someData length:dataLength];

这将由使用复制的字节初始化的新内存块支持(如果您不想复制,还有另一个构造函数(。

然后使用dataBuffer.bytesdataBuffer.mutableBytesvoid *形式访问原始字节(例如,可以转换为char *(。

请注意,new byte[]是在堆上分配的(动态大小(,但您声明的方式dataBuffer[sDataLen]显示在堆栈上(并且具有固定大小(。NSData是动态的。

最新更新