Domanda

Ho un NSTimer che si attiva ogni secondo e in quel secondo aggiorno un UILabel impostando la proprietà text in questo modo:

remainglbl.text = [NSString stringWithFormat:@"%i:%02i", var1, var2];   

Funziona bene, ma quando lo eseguo in xcode con Start With Performance Tool - > Perdite, sembra che il ricordo continui a salire e arrampicarsi e arrampicarsi.

Da quanto ho capito, la stringa dovrebbe essere rilasciata automaticamente (anche se non vedo mai diminuire la memoria o smettere di aumentare).

È una perdita di memoria? C'è un modo migliore per farlo per tenere sotto controllo il mio utilizzo della memoria?

Grazie!

Aggiornamento: il codice per creare il timer è il seguente:

timeTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(changeTime:) userInfo:nil repeats:YES];  
Il codice

da ripulire al termine del timer è il seguente:

[timeTimer invalidate];
[timeTimer release];
timeTimer = nil;

Qualcosa non va in questo? Ho pensato che la memoria potesse essere liberata al termine del timer, ma non lo è.

È stato utile?

Soluzione

Credo che il problema fosse che non capivo gli strumenti per le prestazioni. L'esecuzione con Activity Monitor non mostra un aumento dell'utilizzo della memoria.

Altri suggerimenti

Appena per curiosità, il problema si verifica ancora se si utilizza [rimanendobl setText:] invece di impostare la proprietà? Il tuo codice sembra a posto ... la memoria dovrebbe essere pulita poiché stringWithFormat rilascia automaticamente la stringa.

Un'altra cosa da provare: quando crei thread in Objective-C devi racchiudere tutto il codice in un NSAutoreleasePool in modo che le cose che crei durante l'esecuzione del thread vengano ripulite. Questo non dovrebbe fare la differenza qui come dovrebbe già esistere - ma vale la pena provare.

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