Estoy desarrollando una aplicación de iOS con iOS 5 SDK, el recuento automático de referencias está habilitado. Pero tengo un objeto específico que está siendo creado en grandes cantidades y debe ser liberado después de un segundo porque de lo contrario el dispositivo se volverá muy lento. Parece que no se han liberado, ya que el dispositivo es muy lento. ¿Hay alguna forma de liberar manualmente un objeto cuando ARC está habilitado?iOS: ¿Cómo eliminar objetos de la memoria con ARC habilitado?
EDITAR: Mi código, esto se llama 200 veces por segundo para generar destellos. Se desvanecen después de 0,8 segundos, por lo que son inútiles después de eso.
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];
El código objeto chispa:
#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
He añadido mi código a la pregunta. – icant
¿no puedes simplemente configurar el objeto a 'nil'? Estoy preocupado porque estoy construyendo muchos objetos NSArray y Dictionary en el ciclo y agregándolos en una matriz global, así que no los necesito después de eso. ¿Cómo elimina ARC los objetos construidos en el ciclo? – applefreak
No funciona del todo así: si crea objetos en un bucle for y los agrega a una matriz global, se conservarán. No pueden liberarse hasta que * se eliminen * de la matriz global (es decir, su recuento retenido es cero). – lxt