Динамический буфер в цели C (с ARC)

Я пытаюсь использовать метод - (void)getCharacters:(unichar *)buffer range:(NSRange)aRange объекта NSString, но у меня проблема с первым параметром. Количество символов в этой NSString не фиксировано, поэтому мне нужно динамически выделять буфер (размер буфера должен быть примерно [my_string length] * sizeof(UniChar)).

Я новичок в Objective C и не знаю, как это сделать. Могу ли я использовать 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