2009-03-05 2 views
2

У меня проблема с NSString.Проблема с памятью NSString

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

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

Может ли кто-нибудь дать мне несколько предложений? Благодарю.

ответ

5

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

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

3

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

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

+1

Путь другой: соблюдайте правила, и ваше приложение не будет просачиваться (где-нибудь там будет ошибка). Не следуйте правилам, и ваше приложение будет течь - когда-нибудь, если не сейчас. –

Смежные вопросы