web-dev-qa-db-fra.com

Dois-je utiliser la méthode dealloc avec ARC?

Donc j'ai de la classe:

@interface Controller : NSObject
{
    UILabel* fileDescription;
}

@property(strong, nonatomic) UILabel* fileDescription;

Dois-je utiliser la méthode dealloc où la propriété fileDescription sera égale à zéro?
Par exemple:

-(void)dealloc
{
    fileDescription = nil;
}

Sinon, qui rejettera la mémoire utilisée par fileDescription?

39
Vit

En général, vous n'avez pas besoin de fournir une méthode dealloc sous-classée car ARC gère la durée de vie des variables d'instance.

Cependant, il peut être utile d'effectuer un nettoyage autre que la libération d'objets, par exemple pour supprimer un observateur ou fermer proprement une connexion réseau. Vous êtes donc autorisé à sous-classer dealloc sous ARC, mais vous n'êtes pas autorisé à appeler [super dealloc] depuis la méthode sous-classée.

Dans votre cas particulier, ce n'est cependant pas nécessaire.

81
trojanfoe

Non.

Vous n'avez pas besoin de la méthode dealloc dans ARC.

Mais si vous souhaitez effectuer certaines tâches de nettoyage lorsque votre vue est fermée ou libérée. C'est le meilleur endroit, dans ce cas, vous pouvez le mettre en œuvre.

Par exemple:

Vous exécutez une minuterie dans votre vue et elle met à jour votre vue. Lorsque vous quittez la vue, vous devez arrêter cette minuterie. Dans cette condition, vous pouvez utiliser la méthode dealloc et arrêter le minuteur à cet endroit.

Similaire pour NSNotification observateur.

9
Midhun MP

Si vous utilisez ARC.

Pas besoin d'utiliser dealloc et release, le compilateur sait que votre propriété et vos objets sont forts/faibles donc il va les gérer.

ÉDITER:

dealloc est requise si vous utilisez des objets coreframework comme CG... & CF.... Même si vous créez des observateurs pour les notifications, vous devez les supprimer et dealloc est le meilleur endroit pour supprimerObserver.

6
Anoop Vaidya

Ans est NON Parce qu'avec ARC, pas besoin de désallouer.

0
yen

Comme vous utilisez ARC, vous n'avez pas besoin d'utiliser dealloc Complier définira l'autoreleasePool en fonction de l'étendue de la propriété, de la variable ou du contrôle. Et ça va release la mémoire. Il existe différents types d'autoreleasepool en général, nous pouvons les définir comme niveau de fonction, niveau de classe, etc. J'espère que cela vous aidera.

0
Rushi