Sto sviluppando un'applicazione iOS con l'SDK iOS 5, il conteggio di riferimento automatico è abilitato. Ma ho un oggetto specifico che viene creato in grandi numeri e deve essere rilasciato dopo un secondo, perché altrimenti il dispositivo diventerà molto lento. Sembra che non vengano rilasciati, in quanto il dispositivo è molto lento. C'è un modo per rilasciare manualmente un oggetto quando ARC è abilitato?iOS: come rimuovere oggetti dalla memoria con ARC abilitato?
MODIFICA: Il mio codice, questo è chiamato 200 volte al secondo per generare scintille. Si dissolvono dopo 0,8 secondi, quindi sono inutili dopo di allora.
int xanimationdiff = arc4random() % 30;
int yanimationdiff = arc4random() % 30;
if (arc4random()%2 == 0) {
xanimationdiff = xanimationdiff * -1;
}
if (arc4random()%2 == 0) {
yanimationdiff = yanimationdiff * -1;
}
Sparkle *newSparkle = [[Sparkle alloc] initWithFrame:CGRectMake(20 + arc4random() % 280, 20, 10, 10)];
//[newSparkle setTransform:CGAffineTransformMakeRotation(arc4random() * (M_PI * 360/180))]; //Rotatie instellen (was niet mooi, net sneeuw)
[self.view addSubview:newSparkle];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8];
[newSparkle setFrame:CGRectMake(newSparkle.frame.origin.x - xanimationdiff, newSparkle.frame.origin.y - yanimationdiff, newSparkle.frame.size.width, newSparkle.frame.size.height)];
newSparkle.alpha = 0;
[UIView commitAnimations];
Il codice oggetto scintilla:
#import "Sparkle.h"
@implementation Sparkle
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"sparkle.png"]]];
}
return self;
}
@end
Ho aggiunto il mio codice alla domanda. – icant
non puoi semplicemente impostare l'oggetto su 'nil'? Sono preoccupato perché sto costruendo molti oggetti NSArray e Dictionary nel ciclo e li aggiungo nell'array globale quindi non ne ho più bisogno dopo. Come ARC rimuove gli oggetti costruiti nel ciclo? – applefreak
Non è proprio così che funziona: se stai creando oggetti in un ciclo for e li aggiungi a un array globale, verranno comunque mantenuti. Non possono essere rilasciati finché non vengono * rimossi * dall'array globale (ovvero, il loro numero di ritenzione è zero). – lxt