Утечка при добавлении подпредставления - PullRequest
0 голосов
/ 19 июля 2010

Таким образом, Instruments сообщает мне, что у меня есть три утечки памяти, возникающие в этом методе (в частности, он указывает на строку: [self.view addSubview: menuBar.view];

Я не вижу утечки ия ломаю себе голову. Я держу ссылку на объект menuBar и освобождаю его. Кто-нибудь умнее меня, кто может объяснить? Это совпадение, что у меня есть три элемента меню в моей XIB, и я получаю три утечки?

Вот весь метод:

// root vc вызывает для переключения состояния отображения строки меню на экране

-(IBAction) showToolBar {

 //if no toolbar exists, create one and add it to the view
 if (!menuBarView) {


 MenuBarViewController *menuBar = [[MenuBarViewController alloc] initWithNibName:@"MenuBarViewController" bundle:nil];
  menuBar.book = self.selectedTitleDeck;
  menuBar.booksArray = self.allTitleDeck;
  self.menuBarView =  menuBar;
  [self.view addSubview:menuBar.view];
  [menuBar release];

 } 

 CGRect frame = menuBarView.view.frame;

 [UIView beginAnimations:nil context:NULL];


 if (self.toolBarIsDisplayed == NO) {
  //show the toolbar
  frame.origin.y = 725;
 self.toolBarIsDisplayed = YES;

 } else if (self.toolBarIsDisplayed == YES) {
  //hide the toolbar
  frame.origin.y = 788;
  self.toolBarIsDisplayed = NO;
 } 

 self.menuBarView.view.frame = frame;


 [UIView commitAnimations];


}

Ответы [ 3 ]

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

addSubview: сохраняет переданное в него представление (см. Ссылку ). После вызова addSubView вы можете освободить это представление, например:

 MenuBarViewController *menuBar = [[MenuBarViewController alloc] initWithNibName:@"MenuBarViewController" bundle:nil];
  menuBar.book = self.selectedTitleDeck;
  menuBar.booksArray = self.allTitleDeck;
  self.menuBarView =  menuBar;
  [self.view addSubview:menuBar.view];
  [menuBar.view release];
  [menuBar release];
 } 
0 голосов
/ 20 июля 2010

Как указано в комментариях к моему вопросу, проблема была не в коде, а в том, что я запускал мое приложение в симуляторе и пытался обнаружить утечки памяти.

Когда Instruments запускается против кода на устройствеоб утечках не сообщается.

Мой утешительный приз - гораздо более глубокое понимание управления памятью, обнаруженное за два дня попыток обнаружить утечку, которой не было.

Спасибо всем заВаш совет, высоко ценится.

0 голосов
/ 20 июля 2010

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

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