2016-01-26 80 views
0

我註冊在我的應用程序一些觀察家發生超時顯示控制器觀察家:我不能刪除我註冊

for(Ad* ad in ads){ 
    if(ad.published){ 
     [ad resetTimer]; 
     [[NSNotificationCenter defaultCenter] removeObserver:ad name:@"TouchBegan" object:nil]; 
     [[NSNotificationCenter defaultCenter] addObserver:ad selector:@selector(resetTimer) name:@"TouchBegan" object:nil]; 
    } 
} 

在廣告類,我嘗試刪除的dealloc觀察員:

-(void) dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"TouchBegan" object:nil]; 
} 

但是好像在dealloc之後仍然存在觀察者。

廣告陣列是一個店鋪類的屬性:

@property(nonatomic, strong) NSArray<Ad>* ads; 

我如何能徹底清除,我註冊觀察員?

+0

你怎麼知道還存在除去觀察家逐個超類觀察員'dealloc'後的觀察者? – rmaddy

+0

因爲選擇器觸發器 – Burak

+2

甚至調用'dealloc'? – matt

回答

1

它是安全的,在dealloc的[[NSNotificationCenter defaultCenter] removeObserver:self];

+0

這段代碼是否會刪除所有觀察者? – Burak

+0

@Burak不,這行刪除所有名字的「self」作爲觀察者。 – rmaddy

+0

@rmaddy謝謝,更新回覆 - 沒有意識到它可能不清楚 – RolandasR

0

刪除self作爲觀察員的所有名稱如果觀察者被添加到一個視圖控制器,我強烈建議在viewWillAppear將它和viewWillDisappear刪除。

[[NSNotificationCenter defaultCenter] removeObserver:someObserver];將刪除即使這是非常不推薦的(除了在dealloc因爲對象被卸載),但在viewWillDisappear你應該使用[[NSNotificationCenter defaultCenter] removeObserver:self name:@"TouchBegan" object:nil];

+0

觀察者被添加到廣告數組中的對象。當我刷新應用程序時,我將此數組設置爲nil和dealloc。但觀察員不會被刪除。 – Burak