Perché non è necessario rilasciare un punto vendita configurato con & # 8220; assegnare & # 8221 ;?
-
03-07-2019 - |
Domanda
L'ho letto se ho qualcosa del genere:
@property (nonatomic, assign) UIView *anView;
Quindi non mi devo preoccupare della gestione della memoria. Non devo fare [versione anView] nel metodo -dealloc.
Perché?
" assegnare " dice al compilatore: " Ehi amico, questa proprietà non conserva ciò che qualcuno gli assegna " ;. E poi puoi farlo
@synchronize anView;
e il compilatore crea magicamente un getter e un setter, in cui il setter potrebbe apparire così:
- (UIView*) anView {
return anView;
}
e il Setter può apparire come:
- (void) setAnView:(UIView*)newAnView {
anView = newAnView;
}
giusto / sbagliato? Se ciò fosse corretto, il setter non rivendica la proprietà della variabile newAnView, poiché non è un "trattenimento" proprietà. Lo prende e lo assegna alla variabile di istanza. Pertanto, quando si considera la politica di proprietà, non è necessario rilasciare la variabile di istanza anView in -dealloc. L'oggetto non lo possiede. È corretto?
Soluzione
Sì, in pratica hai ragione. Supponiamo che il Garbage Collector sia spento (altrimenti non importa comunque).
Quando si utilizzano le proprietà 'Assegna', non è necessario rilasciare l'oggetto perché non è mai stato conservato (responsabilità di qualcun altro).
In sostanza, questo crea un riferimento debole - anView può essere deallocato mentre la proprietà lo punta ancora. Di solito, useresti "assegnazione" per i tipi di dati primitivi, non per gli oggetti.