2010-09-13 8 views
1
- (id)initWithDelegate:(id)delegate 
{ 
    self = [super init]; 
    if (self) 
    { 
     _delegate = delegate; 

    } 
    return self; 
} 

Est-il généralement recommandé de transmettre le délégué dans la méthode init? Qu'en est-il dans une autre méthode qui sera appelée en premier?définir délégué dans l'objectif-c sur iOS

De même dois-je définir _delegate à nil ou libérer dans la méthode dealloc ou viewDidUnload? et qu'en est-il de la méthode dealloc ou viewDidUnload du contrôleur implémentant ce délégué?

Répondre

2

Est-il généralement recommandé de transmettre le délégué dans la méthode init?

Cela dépend de ce que vous voulez faire. Si vous avez besoin d'un délégué chaque fois que votre objet est instancié, il serait commode de simplement le passer quand vous init votre objet. Mais c'est une préférence personnelle.

Dans le code ici, vous êtes juste assignez _delegate, donc il n'y a pas besoin de vous faire quoi que ce soit avec ce Ivar particulier dans votre dealloc ou viewDidUnload méthodes.

0

Est-il généralement recommandé de transmettre le délégué dans la méthode init? Qu'en est-il dans une autre méthode qui sera appelée en premier?

Vous ne devez définir le délégué à init lorsque l'objet pourrait avoir besoin de communiquer avec le délégué lors de l'initialisation, ou si le délégué ne doit être réglé une fois pendant la durée de vie de l'objet. Sinon, il est recommandé de définir le délégué à travers une propriété.

font aussi je dois mettre _delegate à zéro ou la libération dans la méthode dealloc? et qu'en est-il de viewDidUnload?

Non, _delegate n'a pas besoin d'être mis à zéro et il n'a besoin que d'être libéré si elle a été retenue.

+1

La définition du délégué dans la méthode init peut également être pratique. Si vous suivez toujours un appel init en définissant la propriété, vous pouvez aussi bien fusionner en un appel de méthode. – kubi

1

Si vous devez connaître un délégué pendant la méthode init (ou pas du tout), il ne s'agit pas d'un délégué. Lors de l'utilisation du modèle de délégation, les objets doivent être capables d'effectuer un certain type de comportement par défaut sans leur délégué.

De toute façon, si vous avez un paramètre que votre objet a besoin de savoir pour fonctionner correctement, vous devez absolument le passer lors de l'initialisation.