iOS initialise une instance à l'intérieur d'une fonction à utiliser à l'extérieur
-
29-10-2019 - |
Question
L'analyseur Xcode me dit qu'une méthode renvoie un objet Objective-C avec un nombre de conserve +1:
Mais le moi. Athletes est un objet dont j'ai besoin également en dehors de ma fonction ... comment puis-je résoudre cet avertissement? Merci encore
Les athlètes sont déclarés comme ceci:
NSMutableArray *athletes;
@property (nonatomic, retain) IBOutlet NSMutableArray *athletes;
La solution
Remplacez cette ligne par celle-ci:
self.athletes = [NSMutableArray array];
J'ai écrit une explication complète ici: Gestion de la mémoire pour les propriétés avec attribut de conservation
Autres conseils
Étant donné que votre propriété est définie avec "conserver", l'utilisation de la notation DOT entraînera une conservation supplémentaire. Le rendement de la [[nsMutableArray alloc] init] a un nombre de conservation de 1, puis lorsque vous définissez la propriété en utilisant la fonction de setter générée par la déclaration de propriété, il aura un décompte de conservation de 2.
Pour réparer, soit:
self.athletes = [NSMutableArray array]; // Returns an autoreleased object
Ou, vous pouvez également faire ceci:
athletes = [[NSMutableArray alloc] init]; // Doesn't use the setter generated by the property declaration, so doesn't retain again.
Il existe une belle façon de gérer cela (et vous avez déjà utilisé ce modèle lors de la création de l'interface utilisateur).
NsMutableArray * athlète de l'athlète = [[nsMutableArray alloc] init];
self.athletes = athlète de l'athlète;
Libération d'athlète];
Ici, vous n'avez pas besoin de transporter la charge d'un objet de libération automatique.