2010-07-26 4 views
0

Я проверил с помощью инструментов и не обнаружил утечек памяти. Когда я регистрирую устройство, он обнаруживает утечки памяти с ответственным абонентом - [NSKeyedUnarchiver decodeObjectForKey:], а объект - UIRoundedRectButton.утечка памяти в устройстве не в тренажере

Я до сих пор не использую NSKeyedUnarchiver или любого типа декодирования. Является ли следующий код, отвечает за эту утечку памяти?

- (void)saveToFile:(NSString *)pinStr 
{ 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectoryPath = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectoryPath stringByAppendingPathComponent:@"smsbrain.plist"]; 

NSMutableDictionary *data = [[NSMutableDictionary alloc] init]; 
[data setObject:@"User" forKey:@"username"]; 
[data setObject:@"password" forKey:@"password"]; 
[data setObject:pinStr forKey:@"pin"]; 
[data writeToFile:path atomically:YES]; 
[data release]; 
} 

Или я проверил через Интернет & также некоторые пост на StackOverflow, но не найти лучшее решение.

Я не устанавливаю розетку на нуль в viewdidunload & в методах dealloc. это создает какие-либо проблемы?

мое приложение скрывает фон при возникновении этих утечек. и на консоли я получаю предупреждение «Уровень памяти не является нормальным (20%)»

Итак, что нужно сделать для проблемы невидимого фона tableviewcontroller. он отлично работает на simulater. но что является проблемой в устройстве, которое когда-то скрывает фон.

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

ответ

1

Если вы не делаете никакого NSCoding на себя, ответственный абонент, скорее всего, UIViewController, который декодирует его СИБ файл. Предупреждение памяти, которое вы получаете, вписывается в это предположение.

При возникновении предупреждения о памяти стандартная реализация UIViewController освободит его представление, если оно не отображается (не имеет супервизора). В результате все подпункты этого представления получат сообщение о выпуске и будут отменены, если их никто не сохранит. Но обычно viewController, по крайней мере, сохранит некоторые из своих представлений в представлении через его свойства IBOutlet. Это был viewDidUnload. Он называется сразу после разгрузки (в основном из-за предупреждения о памяти). Это место, когда вы действительно должны освободить все сохраненные подвид вашего взгляда. Это каждый IBOutlet и все, что вы создали в viewDidLoad. Их не нужно держать. При необходимости все они будут воссозданы из наконечника.

В вашем методе dealloc вам необходимо освободить все сохраненные свойства и все сохраненные ivars, которые не возвращают свойство. Пожалуйста, прочитайте Memory Management Programming Guide

Если это не поможет. Нам потребуются объявления свойств и методы viewDidLoad, viewDidUnload, dealloc данного Контроллера.

+0

hi tonclon, проблема есть с IBoutlet. Я выпустил каждый и каждый свойства IBoutlet, но забыл установить их ноль. эта ссылка поможет мне, наконец, выйти из проблемы http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmNibObjects.html#//apple_ref/doc/uid/TP40004998-SW2 –

+0

Лучшая практика для IBOutlet - освободить их и установить нуль в методе dealloc. И в viewDidUnload метод устанавливает self. <Свойство IBOutlet> = nil. Наконец, приложение работает с хорошей производительностью на устройстве. Также нет утечек памяти на устройстве с использованием инструментов. Установка свойства на nil является окончательным решением моей проблемы. –

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