我应该拨打[super awakeFromNib]吗?

时间:2010-10-21 16:23:42

标签: objective-c cocoa

如果我实施自己的awakeFromNib版本,我应该在方法结束时致电[super awakeFromNib]吗?

3 个答案:

答案 0 :(得分:88)

awakeFromNib for UIKit (iOS)

  

您必须调用awakeFromNib的超级实现,以便为父类提供执行所需的任何其他初始化的机会。虽然此方法的默认实现不执行任何操作,但许多UIKit类提供非空实现。您可以在自己的awakeFromNib方法中随时调用超级实现。

awakeFromNib for AppKit (Mac)

(如果使用OS X 10.6或更高版本,则不再适用)

  

只有在确定您的超类提供实现时,才应调用awakeFromNib的超级实现。因为Application Kit不提供awakeFromNib方法的默认实现,所以如果父类没有实现它,则调用super会导致异常。直接父类是NSObject或NSView的类不需要调用超级实现。对于任何其他类,您可以使用NSObject的instancesRespondToSelector:class方法来确定父类是否响应awakeFromNib并调用该方法(如果有)。

答案 1 :(得分:6)

The documentation完全涵盖了这一点。

如果你想询问Cocoa Touch,你就不那么幸运了:UIKit文档没有在我能找到的任何地方明确回答这个问题。我可以建议的最好是遵循与Cocoa相同的规则。

答案 2 :(得分:0)

是的,你应该。

我实现了拖放操作,一切正常,直到我添加了自己的awakeFromNib,然后拖放了函数whichToProcess从未调用过。

直到我添加[super awakeFromNib];作为我自己的awakeFromNib中的最后一个语句,再次调用拖放函数whichTypeToProcess并再次拖放开始工作。

仅供参考 - 这是在MacOSX应用程序中。