утечка памяти в устройстве, а не в симуляторе - PullRequest
0 голосов
/ 26 июля 2010

Я проверил с помощью инструментов и не обнаружил утечек памяти. когда я регистрируюсь в устройстве, это показывает утечки памяти с ответственным вызывающим абонентом - [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. он работает нормально на симуляторе. но какая проблема в устройстве, что оно когда-нибудь скрывает фон.

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

1 Ответ

1 голос
/ 26 июля 2010

Если вы не выполняете NSC-кодирование для себя, ответственный вызывающий абонент, скорее всего, является UIViewController, который декодирует свой nib-файл. Полученное предупреждение о памяти вписывается в это предположение.

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

В вашем методе dealloc вы должны разблокировать все сохраненные свойства и все сохраненные ивары, которые не поддерживают свойство. Пожалуйста, прочитайте Руководство по программированию управления памятью

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

...