Правильное управление памятью для [string UTF8String] - PullRequest
4 голосов
/ 30 апреля 2010

Я немного новичок в Objective-C, и я не уверен, как правильно управлять памятью для этого кода.

const unsigned char * data =(const unsigned char *) [string UTF8String];

Когда я звоню бесплатно на данных, я получаю сообщение об ошибке. Нужно ли убирать после этого звонка?

Ответы [ 4 ]

10 голосов
/ 30 апреля 2010

Нет. «UTF8String» не содержит слов alloc, copy, retain или create. Таким образом, вы не несете ответственности за эту память.

Обратите внимание, что если вы хотите, чтобы эти данные оставались после выхода string, вы должны скопировать их; согласно контракту, вы не несете ответственности за эту память, но вы также не гарантируете, что она прослужит за пределами предмета, который дал ее вам.

2 голосов
/ 30 апреля 2010

Как указано в документации , он автоматически освобождается так же, как и объект с автоматическим освобождением.

2 голосов
/ 30 апреля 2010

Вам не нужно free это.

В Какао, если метод не содержит слов alloc, init или copy, вы не являетесь владельцем объекта, возвращаемого указанным методом.

-UTF8String на самом деле указывает на представление cstring объекта NSString, к которому вы обращаетесь. Когда состояние объекта изменяется, UTF8String также изменяется.

0 голосов
/ 30 апреля 2010

технически говоря, free () используется для удаления памяти, выделенной с помощью malloc (), из кучи. malloc () не использовался для выделения памяти. помните, что цель-c с расширениями. переменная данных останется в памяти в соответствии с правилами «scoping» языка c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...