Dov'è la perdita di memoria qui?
-
22-08-2019 - |
Domanda
Strumenti mi dice che c'è una perdita di memoria in questo codice, ma io non riesco a trovarlo .... aiuto? scusate o il newbie domanda.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
int altoBufferCelda = 26;
Mensaje *msg = (Mensaje *)[model.mensajes objectAtIndex:indexPath.row];
CGSize txtSize = [msg.texto sizeWithFont:[UIFont systemFontOfSize:17.0f] constrainedToSize:CGSizeMake(222, 222) lineBreakMode:UILineBreakModeTailTruncation];
[alturasDinamicas setObject:[NSNumber numberWithFloat:(txtSize.height + altoBufferCelda)] forKey:[NSNumber numberWithInt:indexPath.row]];
return txtSize.height + altoBufferCelda;
}
Soluzione
Direi:
[NSNumber numberWithFloat]
Si assegnerà un oggetto autoreleased per voi. L'iPhone non è garbage collection, appena raccolti riferimento. E dal momento che non stanno rilasciando la memoria si assegnano prima di lasciare il metodo, strumenti sta segnalando come una perdita.
Dal momento che questo è attualmente accettato, io sorta di cambiare la mia risposta.
Gli strumenti non è un editto divino. Potrebbe essere sbagliato. Utilizzare come un forte orientamento di ciò che si dovrebbe guardare, ma se onestamente non si può trovare niente di sbagliato o che perde con il codice, basta andare avanti.
Altri suggerimenti
Non riesco a vedere alcuna perdita di memoria nel codice. Come sottolinea toast, strumenti non è sempre preciso. Ciò è in gran parte perché anche il codice dai quadri di Apple contiene le perdite di memoria, che sono riportati dal Instruments troppo.
Se si sta utilizzando XCode 3.2 è possibile scegliere creare e analizzare dal menu Genera, che esegue la scansione del codice per errori normalmente inosservati dal compilatore. Questo ti mostrerà molte perdite possibili di memoria derivanti da dimenticare per rilasciare un oggetto.