Когда выпустить UIView, который удален из суперпредставления - PullRequest
1 голос
/ 11 сентября 2010

Я создаю загрузочный экран UIView, который добавляется к подпредставлению, в то время как часть XML анализируется с некоторого URL. Как только XML возвращается, экран загрузки удаляется из его суперпредставления.

У меня вопрос как мне выпустить этот объект?

В приведенном ниже коде вы увидите, что я отправляю removeFromSuperview на экран загрузки, но у меня все еще есть право собственности на этот объект, пока я его не отпущу. Но, если я выпущу его, там не будет ничего, что можно было бы выпустить в viewdidUnload и dealloc.

- (void)loadView {
  ...
  loadingScreen = [[LoadingScreen alloc] initWithFrame: self.view.frame];
  [self.view addSubview:loadingScreen]; //retain count = 2
}

-(void)doneParsing {
  ...
  [loadingScreen removeFromSuperview]; //retain count = 1
  [loadingScreen release]; //should i release the loading screen here?
}

- (void)viewDidUnload {
  [loadingScreen release]; //if viewDidUnload is called AFTER doneParsing, this
                           //will cause an exception, but the app might crash before
                           //doneParsing is called, so i need something here
}

- (void)dealloc {
  [loadingScreen release]; //if i've already released the object, i can't release here
}

1 Ответ

2 голосов
/ 11 сентября 2010

Когда вы снимаете загрузочный экран, сбросьте его на ноль.

[loadingScreen release];
loadingScreen = nil;

[ноль релиз] ничего не случится.

...