Si vous utilisez pour affecter votre propriété, vous ne pas appeler retain sur l'objet. Cela signifie que vous ne devez absolument PAS appeler release ou autorelease dessus!
Votre ligne dans votre dealloc
[someDelegate release];
provoque un accident à un moment donné dans l'avenir - il faut l'enlever. Vous n'avez pas besoin de vous préoccuper des propriétés assignées dans la méthode dealloc.
Votre ligne
[self setSomeDelegate:nil];
ne fuira pas.
Cependant, vous semblez avoir [[someDelegate alloc] init]
dans votre méthode viewDidLoad
. C'est inhabituel. il est normal que le délégué soit un objet externe, pas un objet fabriqué par vous-même. Dans votre cas, ce n'est pas vraiment un délégué, c'est juste un objet qui fait quelque chose pour vous - vous devez le renommer et changer la propriété en un retain (et n'oubliez pas de le libérer dans dealloc).
Actuellement, si votre propriété est définie sur (assigner) et que quelqu'un d'autre la définit, vous perdrez votre délégué initial. Si vous utilisez uniquement le délégué dans cette classe, peut-être que ce ne devrait pas être une propriété du tout? Si vous voulez juste être capable de le lire à partir de l'extérieur de votre classe, vous pourriez être en mesure d'utiliser (en lecture seule) au lieu de assign (et changer [self setSomeDelegate:nil]
à someDelegate=nil;
)
Votre ligne viewDidUnload
qui définit le délégué à zéro supprime la question vous soulevez dans votre deuxième commentaire - vous supprimez le délégué donc au moment où vous arrivez à viewDidLoad
à nouveau, votre délégué est déjà nul :)
Modifié pour refléter les corrections/commentaires du Deans. – fuzzygoat