2010-07-21 2 views
1

У меня есть течь в следующем коде:проблема утечки на NSUserDefaults и NSMutableArray

- (void)viewDidAppear:(BOOL)animated { 
//If Home-Theme 
    if (themeIndex == 0) { 
     NSUserDefaults *pref = [NSUserDefaults standardUserDefaults]; 
     NSMutableArray *thisArray = [[NSMutableArray alloc] init]; 
     thisArray = [[pref objectForKey:@"Themes"] mutableCopy]; 
     [thisArray release]; 
    } 
} 

утечка в NSMutableArray. Я попробовал несколько разных обходных решений, но ничего не помогло. Возможно, что-то неправильно с NSUserDefaults? любые идеи?

спасибо xnz

+0

Или Олис, когда он опубликовал почти то же самое раньше ... @will, вы можете напомнить пользователям принять * * ответ, но не надавливать на них, чтобы принять ваши. –

+0

@George Fritszsche - Он поблагодарил меня в моем посте ... или у меня бы не было. Спасибо за полицейскую работу :) :) – willcodejavaforfood

ответ

1
NSMutableArray *thisArray = [[NSMutableArray alloc] init]; 

Это просачивается, так как вы никогда не выпустить этот экземпляр, просто назначить новый в следующей строке. Замените его на:

NSMutableArray *thisArray = [[pref objectForKey:@"Themes"] mutableCopy]; 
+0

Спасибо! это работает ... – xnz

1

Вы назначаете NSMutableArray и меняете ссылку на другой массив.

Вы, вероятно, хотите что-то вроде этого:

- (void)viewDidAppear:(BOOL)animated { 
    //If Home-Theme 
    if (themeIndex == 0) { 
    NSUserDefaults *pref = [NSUserDefaults standardUserDefaults]; 
    NSMutableArray *thisArray = [[pref objectForKey:@"Themes"] mutableCopy]]; 
    // do something with thisArray 
    [thisArray release]; 
    } 
} 
+0

В вашем примере отсутствует 'release'. –

+0

@George Fritszsch, спасибо. Я обновил образец кода. – Olly

0

вы Alloc thisArray и затем перезаписать ссылку на него с изменяемой копией с прив. Либо сделайте авторекламу или просто удалите ненужное распределение NSMutableArray.

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