Data la seguente definizione di proprietà:Objective-C Proprietà e gestione della memoria
@property (nonatomic,retain) MyObject* foo;
ha il seguente codice di causare una perdita di memoria:
self.foo = [[MyObject alloc] init];
?
Sembra che la chiamata di alloc incrementi il conteggio di ritenzione sull'oggetto a 1, quindi il mantenimento all'interno del setter di proprietà lo aumenta a 1. Ma poiché il conteggio iniziale non viene mai decrementato a 0, l'oggetto resterà attivo anche quando il sé è rilasciato. Questa analisi è corretta?
Se è così, sembra che io ho due alternative:
self.foo = [[[MyObject alloc] init] autorelease];
che non è raccomandato su iPhone per motivi di prestazioni, o:
MyObject* x = [[MyObject alloc] init];
self.foo = x
[x release];
che è un po 'ingombrante. Ci sono altre alternative?
Questa è un'ottima alternativa che consente di risparmiare tempo durante la creazione delle istanze. –