2011-01-11 3 views
0

У меня есть NSMutableDictionary, называемый «output», и я добавляю в него NSString, который является целым числом. Каков правильный способ сделать это? Я не могу понять. Все, что я пробовал, приводит к утечкам памяти.Управление памятью - Objective C NSString

Это то, что я в настоящее время:

вал является ИНТ

COUNTRYNAME является NSString

Вот как я объявляю "выход":

NSMutableDictionary *output = [[[NSMutableDictionary alloc] init] autorelease]; 

Вот код, который вызывает утечку памяти:

NSString *temp = [NSString stringWithFormat:@"%d",val]; 
[output setValue:temp forKey:countryName]; 

Следующая также вызывает утечку:

NSString *temp = [[NSString alloc] initWithFormat:@"%i",val]; 
[output setValue:temp forKey:source]; 
[temp release]; 
+2

Что вы размещаете, выглядит хорошо. Почему вы думаете, что у вас есть утечки памяти и какие объекты (ы) вы считаете, что вы просачиваетесь? – Jonah

+0

Просто из любопытства, почему вы используете '% d' вместо'% i'? –

+0

Я запустил приложение в «Инструменты», и это показало, что у меня была 100% утечка памяти на этой линии. – CodeGuy

ответ

0

Try для печати переменной температуры, как этот

NSLog("number = %d", [temp intValue]);

, чтобы проверить, что переменная температура хранит в целочисленную переменную или нет.

вы также можете разместить код, который вы использовали для объявления NSMutableDictionary, может быть, мы можем найти какую-то проблему декларации.

+0

Вот объявление «output»: \t NSMutableDictionary * output = [[[NSMutableDictionary alloc] init] autorelease]; – CodeGuy

+0

и вот код, который получает 100% -ную утечку памяти: \t \t \t NSString * temp = [NSString stringWithFormat: @ "% d", val]; \t \t \t [output setValue: temp forKey: keywordName]; – CodeGuy

+0

Вы также можете автоопределить его до того, как вы вернете объект в объекте - c – Robin

2

приборы указывают на источник создания просочившегося объекта. ваш фрагмент кода в порядке. это подразумевает, что позже вы получите доступ к значению с выхода (или самому temp) и чрезмерному сохранению с этого сайта.

+0

. Я возвращаю «вывод», но что вы имеете в виду чрезмерное сохранение с этого сайта? – CodeGuy

+0

Это означает, что (наиболее распространенный пример) вы получаете доступ к ключу: 'countryName' из результата функции/метода (ака' output', который вы возвращаете). раздел кода, который обращается к значению для countryName, затем вводит дисбаланс в счетчике ссылок путем обмена сообщениями 'keep', где его не нужно сохранять. – justin

0

Вы должны сделать копию значения, а затем вернуть setValue в изменяемый словарь. Затем отпустите его.

NSMutableDictionary *copyOfItem = [item copy]; 
[tmpMarkers addObject: copyOfItem]; 
[copyOfItem release], copyOfItem = nil; 
Смежные вопросы