iPhone + stringWithUTF8String + утечки памяти - PullRequest
2 голосов
/ 23 декабря 2009

Я использую следующий код в своем приложении для чтения строкового значения из базы данных:

objPlayer.playerName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)];

Когда я запускаю инструменты, чтобы найти утечки памяти, это дает мне утечки NSCFString в строке выше.

Что мне делать, пожалуйста, помогите мне.

С уважением.

Ответы [ 2 ]

2 голосов
/ 23 декабря 2009

Когда вы устанавливаете свойство playerName, оно автоматически сохраняет NSString (даже если его конструктор автоматически высвобождает его). Поэтому вам придется выпустить его снова в какой-то момент (предпочтительно в методе dealloc).

Когда вы присваиваете значение свойству, объявленному с флагом сохранения, как в @property(retain), тогда, когда вы присваиваете значение этому свойству, оно выполняет три действия: освобождает старое значение, присваивает переменную новому значению, и сохраняет новое значение. Таким образом, строка, которую вы создаете с помощью stringWithUtf8String:, имеет счет сохранения 1 после выполнения этой строки.

В какой-то момент вам придется выпустить эту строку, иначе вы получите утечку. Однако, поскольку это свойство, оно не должно освобождаться до того, как объект, который его содержит, поэтому вы должны поместить это выражение в ваш метод dealloc.

Если ничего из этого не имеет смысла, взгляните на руководство по управлению памятью, с которым связана Алекс.

0 голосов
/ 23 декабря 2009

Попробуйте:

NSString *_playerName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)];
objPlayer.playerName = _playerName;

Или:

NSString *_playerName = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)];
objPlayer.playerName = _playerName;
[_playerName release];

Пожалуйста, уделите немного времени, чтобы прочитать руководство Apple по управлению памятью , которое объясняет эту тему.

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