【super viewWillAppear】有什么作用,什么时候需要?

问题描述 投票:0回答:5
-(void)viewWillAppear:(BOOL)animated{
//something here
[super viewWillAppear];
}

[super viewWillAppear];
总是必需的吗?如果没有,您何时以及为何使用它?

iphone objective-c cocoa-touch
5个回答
52
投票

首先,正确的样板应该是:

-(void)viewWillAppear:(BOOL)animated{
   [super viewWillAppear:animated];
   //something here
}

换句话说,先打电话

super
,然后做你自己的事情。并且您必须将
animated
参数传递给
super

您通常希望在任何方法中首先调用超类的实现。在许多语言中,这是必需的。在 Objective-C 中则不然,但如果您不将其放在方法的顶部,您很容易遇到麻烦。 (也就是说,我有时会打破这种模式。)

调用

super's
实现是否必需?在这种特定方法的情况下,如果您不调用它,您可能会得到意想不到的行为(特别是如果您已经子类化了
UINavigationController
)。所以答案是“不”,不是从技术意义上来说,但你可能应该总是这样做。 但是,在许多其他方法中,可能有充分的理由不调用

super

    


9
投票
super

方法提供了在父类中执行代码的可能性。


关于您的问题,根据

Apple 文档

enter image description here 所以,是的,需要这个方法。


4
投票
[super viewWillAppear]

,之后再调用

reloadData
,使得从详细视图返回时无法检索先前选择的行。当
[super viewWillAppear]
为最后一句时,可以获取选中的行,并显示之前选中的行提示。仅当在
[tableView reloadData]
内使用
viewWillAppear
时才会发生这种情况。
    


2
投票

这是父方法的样子:

代码:

-(NSString *)greet { return @"Hello"; }

我们希望孩子向父母学习。所以我们用 super 来表达妈妈会打招呼的方式,但也有我们自己的一些补充。

代码: // 继承自父级

-(NSString *)greet { NSString *parentGreeting = [super greet]; return [parentGreeting stringByAppendingString:@", Mommy"] }

所以现在家长打招呼“你好”,孩子打招呼“你好,妈妈”。稍后,如果我们将家长的问候语更改为仅返回“Hi”,那么两个班级都会受到影响,并且您将得到“Hi”和“Hi, Mommy”。

super 用于调用超类定义的方法。它用于访问已被子类重写的方法,以便该类可以将自己的代码包装在其父类实现的方法周围。如果您正在进行任何类型的继承,这非常方便。


0
投票

NSObject Nib 生命周期:

方法从Nib唤醒可以
默认实现为空 致电超级 拨打超级帖子
虽然此方法的默认实现不执行任何操作,但许多 UIKit 类提供非空实现。 在您自己的 awakeFromNib 方法期间随时调用超级实现 在任何时候
UIViewController 演示生命周期:

方法加载视图viewDidLoad视图将出现viewIsAppering查看已出现视图将消失viewDidDisappear
默认实现为空 致电超级 拨打超级帖子
一定不能 没有提及
没有提及 没有提及 没有提及
没有提及 必须 在某个时刻
没有提及 需要 在某个时刻
没有提及 必须 在某个时刻
没有提及 必须 在某个时刻
没有提及 必须 在某个时刻
UIViewController视图布局生命周期:

方法更新视图约束viewWillLayoutSubviewsviewDidLayoutSubviews
默认实现为空 致电超级 拨打超级帖子
是的 最后一步
是的 没有提及 没有提及
是的 没有提及 没有提及
© www.soinside.com 2019 - 2024. All rights reserved.