En vertu de l'ARC, comment puis-je libérer les éléments dans un NSArray?
En vertu de la norme Objective-C manuel de gestion de la mémoire, il a été suggéré dans cette question que le chemin vers la libération d'un NSArray initialisé à l'aide de
imageArray = [[NSArray alloc] initWithObjects:[UIImage imageNamed:@"1.png"],
[UIImage imageNamed:@"2.png"],
nil];
était d'utiliser
[imageArray release];
imageArray = nil;
Donné que nous ne pouvons plus utiliser -release
automatique de comptage de référence, ce qui serait la manière suggérée à libérer cette NSArray en vertu de l'ARC?
Veuillez donner votre question quelque peu de son contenu au lieu de juste un lien à l'autre, et de se demander "comment faire en utilisant l'ARC"
En vertu de l'ARC, tu ne peux pas définir imageArray = nil; et l'analyseur statique de décider si à la place d'une libération?
double possible de image claire de tableau sur le bouton cliquez sur
Je crois que la question peut se tenir debout sur ses propres. Il avait juste besoin d'un peu mieux libellé (que j'ai essayé de l'offre).
En vertu de l'ARC, tu ne peux pas définir imageArray = nil; et l'analyseur statique de décider si à la place d'une libération?
double possible de image claire de tableau sur le bouton cliquez sur
Je crois que la question peut se tenir debout sur ses propres. Il avait juste besoin d'un peu mieux libellé (que j'ai essayé de l'offre).
OriginalL'auteur Lucas | 2011-08-26
Vous devez vous connecter pour publier un commentaire.
Si le imageArray est un ivar pour un objet (peut-être pas une hypothèse sûre), vous devez utiliser un accesseur pour définir la matrice nulle; l'accesseur prendra soin de libération de la matrice et de tous ses membres:
[self setImageArray:nil];
Si vous avez besoin de nettoyer un tableau avec beaucoup de membres, mais de garder un tableau valide prêt dans ce ivar ainsi que d'autres méthodes peuvent en toute sécurité envoyer des messages, vous pouvez utiliser les éléments suivants:
[self setImageArray:[[NSArray alloc] init]];
Qui remplacera l'ancien tableau avec un nouveau tableau vide.
Vrai; je vais modifier ma réponse en conséquence.
"Si le imageArray est un ivar pour un objet (peut-être pas une hypothèse sûre), vous devez utiliser un accesseur pour définir la matrice nulle; l'accesseur prendra soin de libération de la matrice et de tous ses membres" Un ivar, ce n'est pas une propriété. Chaque propriété utilise une variable d'instance, mais pas chaque variable d'instance utilise une propriété. Aussi, en vertu de l'ARC, vous n'avez pas besoin de propriétés pour obtenir le automatique de la relâcher. Il suffit de régler le ivar à
nil
(donc:imageArray = nil
) et le compilateur va faire le travail. 😉Ce qui sur un tableau, avec un champ d'application de la méthode, c'est à dire créé et de vie pour les invocations de méthode ?
pour être exact, pas toutes les propriétés est d'utiliser une variable d'instance, par exemple avec la coutume de la méthode d'accès.
OriginalL'auteur matthias
À l'utilisation de l'ARC que vous venez de supprimer votre
retain
etrelease
messages et c'est tout. Afin que vous vous débarrasser de votre tableau comme ceci:Cela fonctionne et n'a pas de fuite, car en vertu de l'ARC le compilateur insère automatiquement le nécessaire
retain
etrelease
appels.OriginalL'auteur Sven