Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 我是否应该在-[UIViewController viewWillUnload]和-[UIViewController dealloc]中从UIView中删除KVO?_Objective C_Uiviewcontroller - Fatal编程技术网

Objective c 我是否应该在-[UIViewController viewWillUnload]和-[UIViewController dealloc]中从UIView中删除KVO?

Objective c 我是否应该在-[UIViewController viewWillUnload]和-[UIViewController dealloc]中从UIView中删除KVO?,objective-c,uiviewcontroller,Objective C,Uiviewcontroller,我将观察者添加到UITableView属性 [tableView addObserver:self-forKeyPath:@“contentSize”选项:NSKeyValueObservingOptionNew-context:nil]; 众所周知,当弹出UIViewController时,将调用-[UIViewController dealloc]方法,并在收到内存警告时调用-[UIViewController viewWillUnload] 我是否应该在两个地方删除observer(好的

我将观察者添加到
UITableView
属性

[tableView addObserver:self-forKeyPath:@“contentSize”选项:NSKeyValueObservingOptionNew-context:nil];
众所周知,当弹出
UIViewController
时,将调用
-[UIViewController dealloc]
方法,并在收到内存警告时调用
-[UIViewController viewWillUnload]


我是否应该在两个地方删除observer(好的,无论如何我必须删除)?这是最好的代码复制。或者我可以在
-[UIViewController dealloc]
中调用
-[UIViewController viewWillUnload]
(如在Three20框架中编写的)?这种方法好吗?

您应该只删除dealloc中的观察者。如果你在viewWillUnload中也这样做,你可能会删除观测者两次,这将使你的应用程序崩溃。但是,添加两次观察者并不是问题。即使你在ViewDiUnload中没有tableView,观察者也可以继续存在,它什么也不会做。

我不能只在
-[UIViewController dealloc]
中这样做,因为
UITableView
我添加的观察者属性将在
-[UIViewController DiReceiveMemoryWarning]
中被销毁:它调用
-[UIViewController viewWillUnload]
但不调用
-[UIViewController dealloc]
。最后一个不调用
-[UIViewController viewWillUnload]
。引用链接引用链接也在弹出
UIViewController
时不调用此方法。这是问题。这回答了“我应该删除观察者吗?”,而不是“如何在将观察者添加到
-[UIController视图]
子视图之一时不复制代码?”