2

NSString 개체의 - (void)getCharacters:(unichar *)buffer range:(NSRange)aRange 메서드를 사용하려고하는데 첫 번째 매개 변수에 문제가 있습니다. 이 NSString의 문자 수는 고정되어 있지 않아 버퍼를 동적으로 할당해야합니다 (버퍼 크기는 [my_string length] * sizeof(UniChar)과 같아야합니다).목표 C의 동적 버퍼

저는 객관적인 C 언어로 새롭고 그렇게하는 법을 모릅니다. C 프로그램과 마찬가지로 malloc (ARC 사용)을 사용할 수 있습니까?

답변

2

예, 적절한 크기의 버퍼 인 malloc()을 사용할 수 있습니다. ARC가 malloc 메모리를 관리하지 않기 때문에 버퍼가 더 이상 사용되지 않으면 free() 버퍼가 있어야합니다.

는 달리, UTF-16 인코딩으로 NSData 객체를 생성 :

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

charsPtr만큼 data가 존재하는 유효, 즉만큼이 강한 참조를 유지한다.

+0

답장을 보내 주셔서 감사합니다. 호기심에 의해, 두 번째 솔루션이 첫 번째 솔루션보다 우수할까요? 아니면 두 솔루션이 동일합니까? – Morniak

+0

@Molyk : 나는 그것이 단지 맛의 문제라고 생각한다. 두 번째 솔루션에는 개체를 생성하기 때문에 약간의 오버 헤드가 있습니다. 그러나 나는 당신이 미리 버퍼 크기를 계산할 필요가 없기 때문에 그것을 좋아한다. –