popViewController返回的时候,
[self.navigationController popViewControllerAnimated:YES];
这个命令是异步在主线程执行的,会先执行命令之后的同步任务。
- (void)goback {
[self.navigationController popViewControllerAnimated:YES];
[self.delegate someDelegateAction];
NSLog(@"------当前控制器代理完成后%s", __FUNCTION__);
}
// 打印:
调用了上层控制器的代理任务-[ViewController someDelegateAction]
------当前控制器代理完成后-[VCB goback]
-----当前控制器-[VCB viewWillDisappear:]
>>>上层控制器-[ViewController viewWillAppear:]
-----当前控制器-[VCB viewDidDisappear:]
>>>上层控制器-[ViewController viewDidAppear:]
-----当前控制器-[VCB dealloc]
当前控制器总能在相关同步任务执行完后才销毁。
而且,如果在上层控制器的代理方法中,push出另外一个控制器的话。也会在push出来的新控制器 viewDidLoad 后,当前控制器才销毁。因为代理方法中,异步提交push新控制器的任务比当前控制器最后异步提交dealloc靠前。
网友评论