Если вам нужен объект для сохранения / освобождения, как и для любого другого объекта, вы можете сделать следующее:
NSData* storage= [yourNSString dataUsingEncoding:NSUTF8StringEncoding];
char* yourCString= (char*)storage.bytes;
// your code flow here
Теперь вы можете передавать как storage
, так и yourCString
в любую функцию, сохраняющую / освобождающую память по своему усмотрению, когда счетчик хранения storage
станет равным 0, память, указанная yourCString
, также будет освобождена.
Я использовал это, чтобы сохранить одну копию очень длинной строки при наличии ссылок, созданных strtok_r
в bean-компонентах, и освобождать память только после того, как были освобождены все bean-компоненты.
Небольшая заметка о (отсутствует) спецификации:
Как указано здесь http://boredzo.org/blog/archives/2012-06-03/characters-in-nsstring dataUsingEncoding:
должен добавить спецификацию, но я проверил с помощью отладчика, и в возвращаемых байтах нет спецификации .