2017-06-11 1 views
2

Je lis, qu'il est toujours préférable d'appeler super.method(), si vous remplacez une méthode.Appel toujours super après avoir écrasé?

Toutefois, remplacer la méthode perform() d'un UIStoryboardSegue et d'appeler super.perform() déclenche une exception. Si je n'appelle pas super.perform(), cela fonctionne très bien.

Pourquoi?

+1

Copie possible de [Quand dois-je appeler super?] (Https://stackoverflow.com/questions/3906704/when-should-i-call-super). - Comme indiqué dans les réponses, il n'y a pas de règle générale, vous devez consulter la documentation de la méthode respective. –

+0

En termes plus simples: Apple spécifie quand il doit appeler le 'super.method()' car la classe mère fait des choses "importantes" par du code caché par Apple (déclenche les appels, etc.). Par exemple, pour 'UICollectionViewCell'' prepareForReuse() '" L'implémentation par défaut de cette méthode ne fait rien, cependant, en surchargeant cette méthode, il est recommandé d'appeler super quand même. ". À l'avenir, ils peuvent ajouter du code qui devrait être appelé en interne. Dans votre propre code, vous pouvez parfois éviter cela lorsque vous sous-classez. C'est propre à chaque cas/scénario. – Larme

Répondre

1

Certaines méthodes ne sont pas supposées être appelées directement. Reportez-vous à la documentation. Par exemple, vous ne devez pas appeler [Super loadView] dans loadView de votre sous-classe, mais vous pouvez appeler [Super viewDidLoad] en surchargeant viewDidLoad.Ref: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview?preferredLanguage=occ

Dans ces cas, les sous-classes doivent avoir leur propre implémentation comportement de l'implémentation de super.