Управление памятью: строка NSStringWithCString: кодировка:
Предположим, я получаю строку C из некоторой функции:
char * mystring = SomeCFunction(...);
И я владею этой строкой (я отвечаю за ее освобождение, когда я закончу).
Если в Objective-C я создаюNSString *
с помощью:
NSString * mynsstring = [NSString stringWithCString:mystring
encoding:NSUTF8StringEncoding];
Я все еще ответственен за освобождение оригинальной строки C?
Я предполагаю, что ответ - да, но я не могу найти окончательный ответ в документации - и функциональность противоположного метода (cStringUsingEncoding
), хотя и чувственный, он заставляет меня задуматься, потому что он обрабатывает освобождение cString для вас.
Если ответ «да», я также несу ответственность за то, чтобы убедиться, что я не освобождаю строку c, прежде чем я закончу с использованиемNSString *
, или функция копирует строку для меня? Я спрашиваю это, потому что документация дляstringWithCString
говорит это:
Возвращает строку, содержащую байты в указанном массиве C, интерпретированные в соответствии с заданной кодировкой.
Что по-прежнему заставляет меня задуматься, скопировала ли она на самом деле байты или просто указывает на них внутренне (а я в основном просто выполняю приведение).