Помогите пожалуйста: UINavigationController и просмотр контроллеров управления памятью - PullRequest
0 голосов
/ 24 марта 2011

У меня странная проблема с методом, который вызывается при каждом нажатии кнопки:

- (void)launcherView:(TTLauncherView*)lnchr didSelectItem:(TTLauncherItem*)itm {
  MyObject* obj = ...

  MyViewController* detailView = [[MyViewController alloc] init];  // line A
  [self.navigationController pushViewController:detailView animated:YES];
  [detailView setObject:obj];
  detailView = nil;  // should I also release it? -- line B
}

Проблема в том, что я извиняюсь, мне нужно выпустить detailView (инструмент памяти показывает, что у меня утечка памятиэто не сделано), также потому, что navigationController должен сохранять мой detailView, но оба, если я пытаюсь добавить авто-выпуск в строке «A» или в строке «B», или просто выпуск для detailView в строке «B» (конечно, доприсваивая ему ноль), программа аварийно завершает работу с сообщением об освобождении причины EXC_BAD_ACCESS, которое отправляется освобожденному экземпляру [CALayer] ...

Есть идеи?Большое спасибо

Ответы [ 4 ]

2 голосов
/ 24 марта 2011

попробуй так

- (void)launcherView:(TTLauncherView*)lnchr didSelectItem:(TTLauncherItem*)itm {
  MyObject* obj = ...

  MyViewController* detailView = [[MyViewController alloc] init]; 
  [detailView setObject:obj];
  [self.navigationController pushViewController:detailView animated:YES];
  [detailView release];
  detailView = nil;  // now this will be optional
}
1 голос
/ 24 марта 2011

Это работает без сбоев?

- (void)launcherView:(TTLauncherView*)lnchr didSelectItem:(TTLauncherItem*)itm {
  MyObject* obj = ...

  MyViewController* detailView = [[MyViewController alloc] init];
  [self.navigationController pushViewController:detailView animated:YES];
  //[detailView setObject:obj];  // <- What's this for?
  [detailView release]
}
0 голосов
/ 24 марта 2011

Когда вы устанавливаете detailView = nil;, не отпуская его, вы только ноль указатель на память.Блок памяти все еще выделяется, пока вы не отпустите его.

Вы должны использовать [detailView release] до detailView = nil, иначе у вас не будет возможности снова сослаться на этот блок памяти (утечка памяти).

0 голосов
/ 24 марта 2011

попробуйте "initwithnibname"

не имеет отношения, но если вы преследуете утечки памяти, не забудьте выпустить MyObject

...