[英]What is the Objective-C equivalent of Marshal.Copy
我正在將項目從Xamarin(C#)重寫為Native-iOS(Objective-C)。 我的問題是如何將Marshall.Copy重寫為Objective-C? 我們有一個具有相同功能的庫嗎?
Xamarin
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.bytes
或dataBuffer.mutableBytes
來訪問原始字節,形式為void *
(例如,可以將其強制轉換為char *
)。
請注意, new byte[]
在堆上分配(動態大小),但是聲明dataBuffer[sDataLen]
出現在堆棧上(並具有固定的大小)。 NSData是動態的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.