簡體   English   中英

什么是與Marshal.Copy相等的Objective-C

[英]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.bytesdataBuffer.mutableBytes來訪問原始字節,形式為void * (例如,可以將其強制轉換為char * )。

請注意, new byte[]在堆上分配(動態大小),但是聲明dataBuffer[sDataLen]出現在堆棧上(並具有固定的大小)。 NSData是動態的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM