2009-06-17 4 views
6

Est-ce important si j'appelle la méthode de la super classe en premier ou à la fin? Par exempleLe moment de l'appel de la méthode de la super classe est-il important dans ObjectiveC?

-(void)didReceiveMemoryWarning { 
    /* do a bunch of stuff */ 

    [super didReceiveMemoryWarning]; 
} 

contre

-(void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 

    /* do a bunch of stuff */ 
} 

même question pour d'autres méthodes telles que viewWillAppear, willRotateToInterfaceOrientation etc.

Je cherche des différences significatives, non seulement stylistiques ou philosophiques (bien que ceux sont les bienvenus aussi).

Répondre

6

convention de cacao typique:

  1. Si vous effectuez l'installation, appelez super FIRST
  2. Si vous exécutez démontage, appel super LAST

Donc, l'initialisation, viewDidLoad, etc. tombent sous le premier cas. Les avertissements de mémoire, viewDidUnload et dealloc relèvent du deuxième cas.

Vous devriez également concevoir vos classes pour suivre cette convention. Toute déviation doit être spécifiquement notée.

connexes réponse si:

`[super viewDidLoad]` convention


Pour ajouter: La raison pour appeler super premier lors de l'installation, est que vous voulez vous assurer que tout est en place avant d'étendre la fonctionnalité. Le corollaire, c'est que lorsque vous désengagez, vous ne voulez pas que votre sous-classe doive être désengagée avant que vous ayez une chance de les gérer.

Cela a du sens en référence aux mises à jour de l'interface utilisateur ainsi que noté dans les commentaires ci-dessous.

+0

comment classeriez-vous willRotateToInterfaceOrientation dans cette évaluation? – fnCzar

+2

À mon avis, je dirais que c'est configuré. Je pense que vous voulez que la super classe effectue des rotations de ses objets (qui incluent probablement l'objet vue racine) et que vous voulez ensuite gérer les vôtres (qui sont les sous-vues les plus probables) après que cela se produit. –

6

Cela dépend de la fonctionnalité, soit vous voulez faire quelque chose après que la super classe a fait son truc ou avant. Par exemple, si la superclasse contient des éléments d'interface utilisateur et que vous les étendez, votre classe contiendra plus d'éléments d'interface utilisateur. Pour que la taille corresponde à l'ensemble de votre objet, vous appelez probablement super classe pour calculer la taille de ses éléments, puis vous ajoutez à cette taille la taille des éléments que vous avez ajoutés.

Cela n'aurait aucun sens autrement - super classe n'est pas au courant de vos éléments, donc il écraserait votre calcul. Encore une fois, cela dépend de la mise en œuvre.

Il y a un cas précis où vous devez appeler la méthode super comme dernière chose:

-(void)dealloc 
{ 
    ... 
    [super dealloc]; 
} 
Questions connexes