2010-02-11 7 views
3

Une petite question, après viewDidUnload, le dealloc est-il également appelé? Je demande en ce qui concerne pickerData, je comprenais que la variable serait libérée lorsque le dealloc est appelé. Ma raison de demander est que j'ai remarqué dans un livre que l'auteur définit pickerData à nil dans viewDidUnload. Est-ce une surutilisation inoffensive, peut-être même une bonne pratique, ou n'y a-t-il pas de scénario où l'un ne serait pas appelé sans l'autre.Est-ce que dealloc est appelé après viewDidUnload?

INTERFACE:

@interface SingleViewController : UIViewController { 
    NSArray *pickerData; 
} 
@property(nonatomic, retain) NSArray *pickerData; 
@end 

implmentation:

-(void)viewDidUnload { 
    [self setSinglePicker:nil]; 
    [self setPickerData:nil]; 
    [super viewDidUnload]; 
} 

-(void)dealloc { 
    NSLog(@"Here"); 
    [singlePicker release]; 
    [pickerData release]; 
    [super dealloc]; 
} 
@end 

gary

Répondre

6

Non, viewDidUnload: est appelée lorsque la vue d'un UIViewController est libéré. dealloc: n'est appelé que lorsque le compteur de références de UIViewController est nul. Le code de l'auteur est une bonne pratique.

L'auteur utilise des méthodes synthétisées pour mettre les ivars à zéro, ce qui signifie que les ivars reçoivent des messages de libération. viewDidUnload: est l'endroit où vous êtes censé libérer des objets ou de la mémoire que vous pouvez facilement recréer. L'auteur dit essentiellement: «Je n'ai plus besoin de références à ces choses, je décrémente le nombre de retenues et j'espère que cela libèrera un peu de mémoire, je le recréerai plus tard si nécessaire dans viewDidLoad :.

La définition des ivars sur zéro n'aura aucune conséquence si la commande dealloc est appelée car les messages à zéro sont gérés par l'environnement d'exécution Objective-C.

+0

Lorsque le compte de référence UIViewControllers passe à zéro, c'est-à-dire lorsque le UIViewController est libéré. Je n'étais pas au courant de cela, bon à savoir et une bonne raison d'avoir les deux [self setPickerData: nil]; & [release de pickerData]; – fuzzygoat

+0

Merci pour l'info supplémentaire dans le montage Rob, très apprécié. – fuzzygoat

Questions connexes