2010-10-07 37 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]; 
    } 

當我與性能工具運行泄漏它佔用更多的內存問題,在我的代碼的內存管理

當IAM移動....

做什麼....

我需要在圖層上觸摸這部電影來繪製這個星形,所以我可以稍後執行動畫....

回答

0

您正在釋放dealloc中的路徑,但在內部創建了它(可能)多次您的touchesMoved:。您可以放心地在touchesMoved:的末尾釋放此資源,請考慮這樣做。

此外,在您做出更改後,您可以從dealloc中刪除發行版,因爲您將永遠不必再將其釋放。你的方法不在你的方法之外。

+0

感謝您的重播.. 我也是這麼做的......但仍然在我的樂器中,當我移動時,所有分配都會增加....它不受控制...... – 2010-10-07 11:26:37

+0

@Kiran爲什麼您聲明starpath作爲一個全局變量?耶爾的回答是正確的。你只需要在觸摸移動方法本身內部釋放starpath。 – Sagar 2010-10-07 12:46:23