Новая панель инструментов создается каждый раз, когда вид появляется, добавляется к виду и никогда не отпускается.Это означает, что и эта панель инструментов, и ее кнопка панели будут работать вечно.Вы можете исправить это, просто отпустив панель инструментов после добавления ее в представление, или отправив сообщение авто-выпуска при его создании.Таким образом, приличный способ сделать это будет заменить:
toolbar = [[UIToolbar alloc] init];
на:
toolbar = [[[UIToolbar alloc] init] autorelease];
Кроме того, способ, которым вы делаете это, каждый раз, когда ваш вид появляется, вы заканчиваетедобавление еще одной панели инструментов в представление контроллера навигации.Таким образом, у вас почти наверняка есть довольно много таких объектов, расположенных друг над другом (так что вы все равно будете видеть утечки, пока навигационное представление не исчезнет).То, что вы можете сделать, это сохранить эту панель инструментов в качестве ивара.Когда ваш вид исчезнет, удалите панель инструментов из вида контроллера Nav.Когда он появится, добавьте его.Создайте саму панель инструментов в вашем методе viewDidLoad
и очистите ее в viewDidUnload
, затем отпустите ее в dealloc.Таким образом, ваш новый класс может выглядеть следующим образом (предположим, вы создали синтезированное свойство с именем сохраняемой панели инструментов):
- (void)viewDidLoad
{
[super viewDidLoad];
UIToolbar* toolbar = [[[UIToolbar alloc] init] autorelease];
// set up toolbar
[self setToolbar:toolbar];
// other load code
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[[self navigationController] view] addSubview:[self toolbar]];
// other vwa code
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[[self toolbar] removeFromSuperview];
}
- (void)viewDidUnload
{
[self setToolbar:nil];
[super viewDidUnload];
}
- (void)dealloc
{
UIToolbar* toolbar = [self toolbar];
[toolbar removeFromSuperview]; // shouldn't ever need this, but be safe
[toolbar release];
// other dealloc
[super dealloc];
}