2

我正在嘗試使用NSString對象的- (void)getCharacters:(unichar *)buffer range:(NSRange)aRange方法,但我遇到了第一個參數的問題。 此NSString中的字符數不固定,所以我需要動態分配我的緩衝區(緩衝區的大小必須是類似[my_string length] * sizeof(UniChar)的東西)。目標C中的動態緩衝區(帶ARC)

我是新的目標C,不知道該怎麼做。 可以像C程序中一樣使用malloc(啓用ARC)嗎?

回答

2

是的,你可以malloc()一個適當大小的緩衝區。當它不再使用時,您必須free()緩衝區 ,因爲ARC不管理malloc ed內存。只要你保持的強引用它

NSString *string = @"H€llö Wörld"; 
NSData *data = [string dataUsingEncoding:NSUTF16LittleEndianStringEncoding]; 
const unichar *charsPtr = [data bytes]; 

charsPtr是有效的,只要存在data,即:

可替代地,創建一個對象NSData使用UTF-16編碼。

+0

謝謝你的回答。由好奇心,第二種解決方案比第一種解決方案更好,還是兩種解決方案是平等的? – Morniak

+0

@Morniak:我認爲這只是一個品味問題。第二種解決方案有一個小小的開銷,因爲它創建了一個對象。但我喜歡它,因爲您不必提前計算緩衝區大小。 –