是否有必要在viewWillAppear中调用super?

Tej*_*uri 2 objective-c viewdidappear viewwillappear ios

我试图了解方法调用方案的场景,确实/将会出现和消失.

我所做的是选择表格单元格(灰色高光),转到详细视图并返回并取消选择所选行(删除选定的单元格灰色).

这是我的方法:

-(void)viewDidAppear:(BOOL)animated {
    DLog(@"%@ did appear", self);
    [super viewDidAppear:animated];

    if (_isPushed) {
        [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
        _isPushed=NO;
    }
}

-(void)viewWillAppear:(BOOL)animated {
    DLog(@"%@ will appear", self);
    [super viewWillAppear:animated];  //If I remove this super call , then it works fine and there is no delay in deselecting the table cell
}

-(void)viewWillDisappear:(BOOL)animated {
    DLog(@"%@ will disappear", self);
    [super viewWillDisappear:animated];
}

-(void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    _isPushed=YES;
}
Run Code Online (Sandbox Code Playgroud)

所以,当我放断点时,流程如下:

没有超级电话:

在推动新VC的同时:

current viewWillDisappear    //makes sense
new viewWillAppear           //makes sense
current viewDidAppear         // doesnt make sense , y this should get called as the view is already appeared?
current viewWillDisappear     // make sense
current viewDidDisappear      //make sense
new viewDidAppear           //make sense
Run Code Online (Sandbox Code Playgroud)

从VC推回来的时候:

current viewWillDisappear
new viewDidDisappear
current viewDidDisappear
new viewDidAppear
Run Code Online (Sandbox Code Playgroud)

超级电话:

在推动新VC的同时:

current viewWillDisappear
new viewWillAppear
current viewDidAppear
current viewWillDisappear
current viewDidDisappear
new viewDidAppear
Run Code Online (Sandbox Code Playgroud)

从VC推回时:

current viewWillDisappear
new viewDidDisappear
current viewDidDisappear
new viewDidAppear
Run Code Online (Sandbox Code Playgroud)

无论是否使用超级呼叫,流程都大致相同.但我面临的问题是,当我在viewWillAppear中使用超级调用时,在删除单元格时会有一个延迟(大约> 1秒).

如果我不在viewWillAppear中使用超级调用,则没有延迟并且单元格正在被删除(大约<0.5秒)

我不确定是否使用超级电话.

任何人都可以告诉我为什么取消选择细胞有延迟?

tro*_*foe 6

是的,文档声明您必须:

讨论

在将接收者的视图添加到视图层次结构之前以及在配置任何动画以显示视图之前调用此方法.您可以覆盖此方法以执行与显示视图相关联的自定义任务.例如,您可以使用此方法更改状态栏的方向或样式,以与所显示视图的方向或样式进行协调.如果重写此方法,则必须super在实现中的某个时刻调用.