当前位置:  开发笔记 > IOS > 正文

我总是要在-viewDidLoad方法中调用[super viewDidLoad]吗?

如何解决《我总是要在-viewDidLoad方法中调用[superviewDidLoad]吗?》经验,为你挑选了7个好方法。

在Apple的scrollView示例中,他们不会调用它.我一直认为这是必须的.我为什么要打电话呢?



1> George Armho..:

如果要覆盖该方法,则仍应在super中调用该方法.即使超级班今天没有对它做任何事情,苹果有朝一日可能会改变实施,你的代码将会神秘地停止工作.如果您真的不需要在该方法中执行任何操作,请将其完全保留在代码之外,并且super的方法将照常运行,而无需您进行任何干预.



2> Steven Fishe..:

不,你不需要调用[super viewDidLoad].编辑:但请阅读下面,因为我认为你绝对应该.

让我们在这里真实:苹果公司不会打破成千上万的应用程序,包括那些基于他们发布的示例代码的应用程序,通过决定他们当前没有处理的事件突然需要做一些开发人员可能或可能不想停止的事情,它是至关重要的是,如果您不需要不同的行为,则不要停止该事件.

编辑:看过Apple如何处理额外一年的兼容性,我现在建议学习并使用正确的模式.虽然我怀疑你的应用程序二进制文件会突然停止工作,但很明显iPhone会检测你的二进制文件构建的SDK,并根据此修改某些操作系统行为.

苹果有朝一日可能需要在未来的SDK上采用特定的模式.在使用最新的Xcode + SDK重建之前,这不会影响您,但是在没有任何源代码更改的情况下,您将获得这些中断.学习并遵循模式是安全的.



3> Paul Tomblin..:

正如Markus所说,UIViewController在其viewDidLoad方法中没有做任何事情,所以你不必调用它.但是,这是一个很好的习惯,如果你改变你的继承结构,突然之前从UIViewController继承的类现在继承了在viewDidLoad方法做某事的东西.



4> Kishore Suth..:

假设您有2个班级,父母和孩子.子继承自Parent.他们有一个名为greet的方法,它返回一个字符串.

以下是父方法的样子:

码:

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

我们希望孩子向父母学习.所以我们用super来说问妈妈会怎么问候,但也有我们自己的小补充.

代码://从Parent继承

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

所以现在父母问候"你好",儿童问候"你好,妈妈".稍后,如果我们改变父母的问候语只返回"嗨",那么这两个课程都会受到影响,你会有"嗨"和"嗨,妈妈".

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



5> Daniel..:

Apple的viewDidLoad文档没有声明你应该调用[super viewDidLoad],所以我会选择Apple的说法.但请注意,对于其他类似方法(如viewDidAppear),必须调用[super viewDidAppear].



6> ullmark..:

你不必调用[super viewDidLoad]

据我所知,超类(UIViewController)中的viewDidLoad只是一个空函数,当使用nib文件初始化ViewController时会调用该函数.

因此,如果您需要进行任何初始化,则应覆盖此函数并将代码放在那里.



7> 小智..:

刚刚注意到,如果你不在这些函数中调用super,Xcode 6的静态分析器会发出警告.所以苹果现在肯定希望我们称之为它.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有