2010-10-07 3 views
1
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
     UITouch *touch=[touches anyObject]; 
     currentPoint=[touch locationInView:self.view]; 
     rootLayer = [CALayer layer]; 
     rootLayer.frame = self.view.bounds; 
     [self.view.layer addSublayer:rootLayer]; 
     starPath = CGPathCreateMutable(); 
     CGPathMoveToPoint(starPath, NULL, currentPoint.x, currentPoint.y + 15.0); 
     for(int i = 1; i < 5; ++i) 
     { 
     CGFloat x = 15.0 * sinf(i * 4.0 * M_PI/5.0); 
     CGFloat y = 15.0 * cosf(i * 4.0 * M_PI/5.0); 
     CGPathAddLineToPoint(starPath, NULL, currentPoint.x + x, currentPoint.y + y); 
     } 
     CGPathCloseSubpath(starPath); 
     shapeLayer = [CAShapeLayer layer]; 
     shapeLayer.path = starPath; 
     UIColor *fillColor = [UIColor colorWithWhite:0.9 alpha:1.0]; 
     shapeLayer.fillColor = fillColor.CGColor; 
     [rootLayer addSublayer:shapeLayer]; 
    } 


    - (void)dealloc { 
     [imageView release]; 
     CGPathRelease(starPath); 
     [super dealloc]; 
    } 

Quand je suis en cours d'exécution avec l'outil de performance des fuites, il occupe plus de mémoireproblème avec la gestion de la mémoire dans mon code

lors du déplacement iam ....

quoi faire ....

j'ai besoin de dessiner cette forme d'étoile sur des films de touches sur la couche afin que je puisse effectuer des animations plus tard ....

Répondre

0

Vous libérez le chemin dans dealloc, mais en le créant (potentiellement) plusieurs fois à l'intérieur votre touchesMoved:. Vous pouvez libérer cette ressource en toute sécurité à la fin de votre touchesMoved:, pensez à le faire. De plus, après avoir apporté cette modification, vous pouvez supprimer la version de dealloc, car vous n'aurez plus à la relâcher. Votre chemin n'existe pas en dehors de votre méthode.

+0

merci pour la relecture .. je l'ai fait de cette façon aussi ... mais toujours dans mes instruments toute augmentation de l'allocation quand je me suis déplacé .... ce n'est pas contrôlé ...... –

+0

@Kiran pourquoi vous avez déclaré Starpath en tant que variable globale? Et la réponse de jer est correcte. Vous avez juste besoin de libérer starpath à l'intérieur des touches a déplacé la méthode elle-même. – Sagar