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