ARC!

Voici une question qui me turlupine depuis un bout. Réutiliser une variable locale qui a eu un Alloc= est-ce synonymes d'un leak potentiel, ou maintenant ARC gère aussi ce type de situation?





UISwipeGestureRecognizer *recognizer;

recognizer = UISwipeGestureRecognizer [b]alloc[/b initWithTarget:self action:@selector(handleSwipeToLeft:)];

[[self view] addGestureRecognizer:recognizer];

recognizer = UISwipeGestureRecognizer [b]alloc[/b initWithTarget:self action:@selector(handleSwipeToRight:)];

[[self view] addGestureRecognizer:recognizer];



J'aime bien réutiliser, mais devrais-je toujours mettre à  nil, au cas?



Merci!

Réponses

  • jpimbertjpimbert Membre
    août 2012 modifié #2
    Pas la peine de mettre à  nil.

    Sous ARC, par défaut les variable sont de type strong ; lors du changement d'affectation d'une variable strong le compilateur ajoute le release de l'ancienne valeur et le retain de la nouvelle valeur si nécessaire.
  • zoczoc Membre
    'FrancoisH' a écrit:


    Voici une question qui me turlupine depuis un bout. Réutiliser une variable locale qui a eu un Alloc= est-ce synonymes d'un leak potentiel, ou maintenant ARC gère aussi ce type de situation ?


    Heureusement que oui... ARC est conçu pour faciliter la vie du développeur. Une telle restriction irait totalement à  l'encontre de ce principe.
  • Merci.



    Et, avec des array= idem:



    NSMutableArray *aArray = [[NSMutableArray alloc] initWithObjects:@hello,nil];



    ...

    aArray = [[NSMutableArray alloc] initWithObjects:@hello,nil];



    Assez fort pour "vider" le array automatiquement. Ou bien dans ce cas, vous iriez avec un aArray removeallobjects ?





    Simplement curieux.
  • Le release d'une collection provoque le release du contenu : tu t'occupes de rien.
  • AliGatorAliGator Membre, Modérateur
    Tu devrais regarder les vidéos de la WWDC sur le sujet (il y en a plusieurs), tout y est expliqué en détail et au cas par cas.
Connectez-vous ou Inscrivez-vous pour répondre.