2012-10-09 77 views
0

我將觀察者添加到UITableView屬性。我應該從UIView中刪除KVO - [UIViewController viewWillUnload]和 - [UIViewControoler dealloc]?

[tableView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil]; 

大家都知道,當UIViewController被彈出-[UIViewController dealloc]方法被調用,當它接收到內存警告-[UIViewController viewWillUnload]

我應該在兩個地方刪除觀察者(好吧,無論如何,我必須)?這是最好的代碼重複。或者,也許我可以撥打-[UIViewController dealloc](寫在Three20框架中)-[UIViewController viewWillUnload]?這種方法好嗎?

+0

請參閱[KVO和ARC如何removeObserver](http://stackoverflow.com/a/6960224/1106035)鏈接請參閱[在iOS中刪除觀察者問題在KVO](http://stackoverflow.com/a/12601081/1106035)也鏈接 –

+0

當'UIViewController'被彈出時,這個方法不會被調用。這是個問題。 – efpies

+0

這回答了「我應該刪除觀察者?」這個問題,而不是「當我將觀察者添加到' - [UIController視圖]子視圖之一時,如何不重複代碼?」 – efpies

回答

1

你應該只刪除dealloc中的觀察者。如果你在viewWillUnload中也這樣做了,你可能會刪除觀察者兩次,這會導致你的應用程序崩潰。但是,兩次添加觀察者不是問題。即使你在viewDidUnload中沒有tableView,觀察者也可以繼續存在,它只是不會做任何事情。

+0

我不能在' - [UIViewController dealloc]中做這個,因爲'UITableView'屬性添加觀察者將被銷燬在' - [UIViewController didReceiveMemoryWarning]':它調用' - [UIViewController viewWillUnload]'但不調用' - [UIViewController dealloc]'。最後一個不調用' - [UIViewController viewWillUnload]'。 – efpies