大多数重载方法都需要[super theMethod]
调用。
(例如[super viewDidLoad];
,[super viewWillAppear];
和[super dealloc];
)
我没有考虑是否需要[super touchesBegan:withEvent:]
打电话,但它似乎以某种方式发挥了作用。
我什么时候需要它,什么时候不需要它?
我正在尝试在需要时以编程方式取消触摸事件,这似乎与我提出的问题有关。
虽然这完全取决于对象的预期行为,但让我们指出基本的:如果您希望超类实现默认行为,您可以在覆盖的方法中调用超类实现(您的意思是覆盖,而不是重载)。
所以你应该问的问题是:
1)超类实现是做什么的?
2)我的对象需要它吗?
那么touchesBegan:withEvent:
你的超类的 etc. 做了什么?这取决于您的类层次结构。您的类层次结构中的自定义类可能已经覆盖了这些方法,您可能想要或不想要这些行为。我假设还没有自定义类覆盖这些方法,所以你只需要检查 Cocoa 实现。
touchesBegan:withEvent:
首先在 UIResponder 类中定义。让我们看看UIResponder 文档,它说
此方法的默认实现什么也不做。然而,UIResponder 的直接 UIKit 子类,尤其是 UIView,将消息转发到响应者链。
所以你在这里得到一个理论。如果您的类直接继承自 UIResponder,则根本不需要调用超类实现,因为它什么也不做。如果它继承自其他 UIKit 子类(例如 UIView),则调用超类实现将启用将消息向上转发到响应者链。但是,覆盖touchesBegan:withEvent:
可能意味着您的子类想要自己处理触摸事件,因此您不想将事件转发到响应者链。所以,我猜你不想在这里调用超类实现。
这真的取决于情况。说,您子类化了一个 UIScrollView,并实现了其中一种touches...
方法。如果您仍然希望视图在用户拖动时滚动,那么您需要调用超类实现,因为它会为您处理滚动。
综上所述,您必须能够回答上述两个问题才能做出决定。要了解超类实现的作用,请阅读Apple 文档。在许多情况下,如果超类实现对常见的预期行为至关重要,则指南文档会给出明确的建议来调用超类实现。