Ho trovato uno strano comportamento con NSString. Ho provato a eseguire il codice seguente e ho notato questo.IOS: versione per NSString non funziona come previsto
NSString *str = [[NSString alloc] initwithstring : @"hello"];
[str release];
NSLog(@" Print the value : %@", str);
Qui, nella terza linea l'app dovrebbe bloccarsi perché stiamo accedendo a un oggetto che è stato rilasciato. Ma sta stampando il valore di str. Non sta andando in crash. Ma con NSArray ho osservato un comportamento diverso.
NSArray *array = [[NSArray alloc] initwithobjects : @"1", @"2", nil];
[array release];
NSLog(@"Print : %@", [array objectatindex : 0]);
NSLog(@"Print : %@", [array objectatindex : 0]);
Il codice ha due istruzioni NSLog utilizzate per NSArray. Qui dopo il rilascio quando viene eseguito il primo NSLog, è il valore di stampa. Ma quando viene eseguito il secondo NSLog, l'app si arresta in modo anomalo. Arresto anomalo dell'app è accettabile perché l'array a cui si accede è già stato rilasciato. Ma dovrebbe bloccarsi quando viene eseguito il primo NSLog. Non il secondo.
Aiutatemi con questo comportamento. Come funziona la liberazione in questi casi.
Grazie Jithen
Questo non è un duplicato esatto, ma ho pensato che valesse la pena sottolineare questa domanda poiché ha alcune risposte parzialmente pertinenti: http://stackoverflow.com/questions/8386084/is-allocinitwithstring-same-as-copy –
User @ BoltClock's answer [here] (http://stackoverflow.com/questions/6069459/does-some-text-give-an-autoreleased-or-retain-1-object-back) anche una buona lettura .. – Krishnabhadra