ios inizializza un'istanza all'interno di una funzione da utilizzare all'esterno
-
29-10-2019 - |
Domanda
l'analizzatore xcode mi dice che un metodo restituisce un oggetto Objective-C con un conteggio di conservazione +1:
ma self.athletes è un oggetto di cui ho bisogno anche al di fuori della mia funzione ... come posso risolvere quest 'avviso? grazie ancora
gli atleti vengono dichiarati così:
NSMutableArray *athletes;
@property (nonatomic, retain) IBOutlet NSMutableArray *athletes;
Soluzione
Sostituisci quella riga con questa:
self.athletes = [NSMutableArray array];
Ho scritto una spiegazione completa qui: Gestione della memoria per proprietà con attributo di conservazione
Altri suggerimenti
Poiché la tua proprietà è definita con "Mantieni", l'utilizzo della notazione DOT comporterà un extra conservare.Il ritorno da [[NSmutableArray ALLOC] Init] ha un conteggio dei conservi di 1, quindi quando si imposta la proprietà utilizzando la funzione Setter generata dalla Dichiarazione della proprietà avrà un conteggio manterra di 2.
per correggere, o:
self.athletes = [NSMutableArray array]; // Returns an autoreleased object
.
O, potresti anche farlo:
athletes = [[NSMutableArray alloc] init]; // Doesn't use the setter generated by the property declaration, so doesn't retain again.
. C'è un bel modo per gestirlo (e hai già usato questo pattern durante la creazione dell'interfaccia utente).
NSMutableArray * athletesTemp= [[NSMutableArray alloc] init];
self.athletes= athletesTemp;
[athletesTemp release];
Qui non è necessario trasportare il carico di un oggetto di rilascio automatico.