Динамичен буфер в обект C (с ARC)

Опитвам се да използвам метода - (void)getCharacters:(unichar *)buffer range:(NSRange)aRange на обект NSString, но имам проблем с първия параметър. Броят на знаците в този NSString не е фиксиран, така че трябва да разпределя своя буфер динамично (размерът на буфера трябва да бъде нещо като [my_string length] * sizeof(UniChar)).

Нов съм в обектив С и не знам как да го направя. Мога ли да използвам malloc (ARC е активиран) като в C програма?


person Morniak    schedule 25.04.2014    source източник


Отговори (1)


Да, можете да malloc() буфер с подходящ размер. Трябва да free() буфера, когато вече не се използва, защото ARC не управлява malloced памет.

Друга възможност е да създадете NSData обект с UTF-16 кодиране:

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

charsPtr е валиден, докато data съществува, т.е. докато поддържате силна препратка към него.

person Martin R    schedule 25.04.2014
comment
Благодаря Ви за отговора. От любопитство, второто решение по-добро ли е от първото или двете решения са равни? - person Morniak; 26.04.2014
comment
@Morniak: Мисля, че това е само въпрос на вкус. Във второто решение има малки режийни разходи, защото създава обект. Но ми харесва, защото не е нужно да изчислявате размера на буфера предварително. - person Martin R; 26.04.2014