В приложении для iphone, с 3 контроллерами представления с UInavigationcontroller, с 2-го по 3-е представление, dealloc не вызывается - PullRequest
0 голосов
/ 03 ноября 2011

Я отправляю вопрос, так как у меня есть похожие проблемы, но не точные. Я новичок в разработке приложений для iPhone. У меня есть 3 вида контроллеров, как показано ниже.

1 - Контроллер MapView является 1-м контроллером представления и вызывает 2-й контроллер представления таблицы по

[self.navigationContrller pushViewController:titlesViewController];

[titlesViewController release];

2 - titleViewController - это 2-й контроллер табличного представления, а в методе DidSelectRowAtIndexPath он вызывает 3-й контроллер представления.

@implementation TitlesViewController
NSMutableArray *titleArray;
NSMutableArray *bidArray;
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
...
    [self.navigationController pushViewController:detailViewController animated:YES];
    [webView release];
    [detailViewController release];
    [titleArray release]; 
    [bidArray release];
    NSLog(@"****** titlesviewcontoller didSelectRowAtIndexPath");
}

- (void)dealloc
{
    [titleArray release];
    [bidArray release];
    [super dealloc];
    NSLog(@"****** titlesviewcontoller dealloc");
}
@end

3 - detailViewController - это третий контроллер вида, отображающий подробную информацию. Я сделал профиль XCode-> инструменты-> утечка памяти, и есть утечка памяти без

[titleArray release];
[bidArray release];

в didSelectRowAtIndexPath во втором контроллере табличного представления.

Я также заметил, что при работе этого приложения в симуляторе IOS, если я перехожу к третьему подробному представлению из второго табличного представления, метод dealloc () не вызывается, поэтому возникает утечка памяти без двух кодов выпуска для titleArray и Bidarray. Но если я перейду со 2-го вида таблицы на 1-й вид, нажав кнопку Back на контроллере UINavitagation, вызывается dealloc (). И так, нет утечки памяти.

Мой вопрос: действительно ли мне нужны 2 кода выпуска
[titleArray release]; [релиз bidArray]; в didSelectRowAtIndexPath во втором контроллере табличного представления. Правильно ли мое наблюдение? Я думал, что dealloc () вызывается каждый раз.

Заранее большое спасибо.

1 Ответ

0 голосов
/ 03 ноября 2011

Вам нужно отпустить НИЧЕГО, что вы alloc. Ничего более. Не меньше. Явным release или установкой autorelease при выделении. Если вы не выделяете, вам не нужно освобождать: это просто ссылка на память, ничего не ссылающаяся.

Почему бы вам не поставить свои глобальные переменные в качестве членских переменных? Вы должны, это было бы более понятно. Если это не сделать их доступными для других классов, ну ... Objective-C не предназначен для этого. И вообще, использование глобальных переменных не рекомендуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...