Perché non è necessario rilasciare un punto vendita configurato con & # 8220; assegnare & # 8221 ;?

StackOverflow https://stackoverflow.com/questions/805892

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top