Проблема памяти NSString - PullRequest
       8

Проблема памяти NSString

2 голосов
/ 05 марта 2009

У меня проблема с NSString.

NSString* str = [[NSString alloc] initWithString:@"Hello world"];

В приведенном выше коде мне нужно освободить объект str? Согласно правилу этот объект создается с помощью alloc, поэтому его следует явно освобождать с помощью метода release. Тем не менее, я не могу найти никаких утечек памяти в Инструментах, когда я явно не выпускаю это. Когда NSString заменяется на NSNumber, происходят утечки памяти.

Кто-нибудь может дать мне несколько советов? Спасибо.

Ответы [ 2 ]

5 голосов
/ 05 марта 2009

Да, вам нужно выпустить его. Такие инструменты, как инструменты, утечки, ObjectAlloc и друзья не являются непогрешимыми; Кроме того, поскольку вы использовали постоянную строку для создания экземпляра, вполне вероятно, что утечки не произойдет. Но, тем не менее, если вы +alloc объект, вы также должны -release его, чтобы убедиться, что объект не протекает, поэтому вам действительно нужно освободить этот объект.

Мой обычный набор ссылок на статьи по управлению памятью Какао: http://iamleeg.blogspot.com/2008/12/cocoa-memory-management.html

3 голосов
/ 05 марта 2009

То, что вы видите, это, вероятно, деталь реализации. Я подозреваю, что -[NSString initWithString:] с неизменной строкой для аргумента просто сохраняет свой аргумент и возвращает его. Для константных строк, таких как @"Hello world", они остаются в течение всей жизни программы, поэтому сохранение и освобождение ничего не делают.

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

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