2013-09-06 2 views
2

У меня есть веб-представление. Я хочу создать новый экземпляр в определенных ситуациях.Создание нового экземпляра UIViewController, удаление старого?

Я делаю это так:

if(self.webViewController){ 
    self.webViewController = nil; 
    [self.webViewController release]; 
} 

self.webViewController = [[WebViewController alloc]initWithNibName:@"TheWebView" bundle:nil]; 

в self.webViewController Я слушаю NSNotification

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
    // Custom initialization 

    } 
NSLog(@"INITING WebView"); 
[[NSNotificationCenter defaultCenter] removeObserver:self]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doPageRequest:) name:@"doPageRequest" object:nil]; 
return self; 

}

Однако если отправить сообщение doPageRequest, он получает вызывается несколько раз. Поэтому мое предположение заключается в том, что все еще больше экземпляров WebView «активно», означает: когда я создал новый экземпляр, старый не освобожден правильно. Любая помощь очень ценится.

ответ

2

Вы должны вызвать [[NSNotificationCenter defaultCenter] removeObserver:self]; в dealloc методе

Добавьте следующую команду и удалить removeObserver строку из метода инициализации.

-(void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [super dealloc]; 
} 

В self изменениях, как вы воссоздаете ViewController, это указатель на новую часть памяти, в котором новый ViewController проживает.
Так что вызов [[NSNotificationCenter defaultCenter] removeObserver:self]; внутри init никогда не удалит предыдущий, который вы добавили в init.

Кроме того, вы устанавливаете self.webViewController = nil; перед тем, как вы обратитесь к нему, очевидно, что это не сработает (вы вызываете выпуск на ноль), поэтому переключите заказ.

[self.webViewController release]; 
self.webViewController = nil; 
+0

хм, это имеет смысл, что вы говорите, к сожалению, это не работает. Я только что узнал об dealloc: моего UIWebViewController никогда не называют. Вы знаете, как я могу убедиться, что он освобожден? – dan

+0

@dan см. Мое редактирование – Pieter

+0

Он получает только один раз. У меня другая проблема, но это новая тема. Большое спасибо! – dan

Смежные вопросы