Согласно документации по методу NSString -UTF8String
:
Возвращенная строка C автоматически
освобожден так же, как возвращаемый объект
быть выпущеным; Вы должны скопировать C
строка, если нужно хранить ее снаружи
контекста аутрелиза, в котором
строка C создана.
Таким образом, при управлении сохранением / освобождением памяти используется следующий метод:
- (const char*) giveMeACString
{
NSString* string = @"I'm a string!";
return [string UTF8String];
}
нормально, если вызывающий метод обрабатывает возвращенный константный символ *, как если бы он был автоматически освобожден.
Тем не менее, насколько я знаю, под сборкой мусора нет контекста автоматического выпуска. А типы C не являются сборщиком мусора, поэтому не похоже, что GC будет обрабатывать возвращаемый указатель так же, как возвращаемый объект.
С чем связана его продолжительность жизни? Он все еще освобожден в точке цикла выполнения потока, которая надежно «позже», или он ведет себя по-другому в GC, чем в не-GC?