Anche se non sono più giovanissimo, sto provando a scrivere semplici applicazioni per Mac OS X e per iPhone. Ho cominciato a esercitarmi con il C, per poi puntare su Objective-C. Sono proprio agli inizi, ma la voglia di imparare non mi manca.
Leggendo le guide Apple e vari tutorial, ho capito che per dichiarare la creazione dei metodi setter e getter relativi a un oggetto istanza, a titolo di esempio si potrebbe scrivere una cosa del genere:
@property (nonatomic, retain) MyViewController *myViewController;
In questo modo dichiaro che con @synthesize saranno implementati i metodi accessori getter e setter, che consentiranno di leggere e modificare il valore dell'oggetto (appartenente alla classe MyViewController) a cui punta *myViewController.
L'aver specificato la property retain farà sì che nel setter possa avvenire una cosa del genere:
- (void)setMyViewController:(MyViewController *)aViewController {
if (myViewController != aViewController) {
[myViewController release];
myViewController = [aViewController retain];
}
}
In pratica:
1) se il vecchio oggetto myViewController è diverso dal nuovo oggetto aViewController, la memoria allocata per il vecchio oggetto viene liberata e al puntatore *myViewController può essere assegnato il nuovo oggetto allocato;
2) il messaggio "myViewController = [aViewController retain]" fa sì che il puntatore *myViewController possa riferirsi all'oggetto aViewController, il cui retain count viene portato a 2 con retain;
3) se il creatore del nuovo oggetto (allocato dinamicamente) rilascia aViewController con un release, tale oggetto non viene deallocato dalla memoria (il suo retain count non si azzera, ma ritorna a 1);
4) in questo modo l'oggetto esiste ancora e ad esso punta il ricevente myViewController, che provvederà al rilascio soltanto quando l'oggetto non servirà più.
Per prima cosa vi chiedo: ho capito la faccenda di retain o sbaglio in qualcosa?
Cosa più importante: non mi sono affatto chiare le proprietà atomic e nonatomic; continuerò a cercare materiale al riguardo, ma se qualcuno potesse spiegarmele con qualche esempio pratico, ve ne sarei grato.
![Grazie [grazie]](http://www.megalab.it/forum/images/smilies/Grazie.gif)