Производительность приложения для iPhone снижается без какой-либо утечки памяти?

У меня есть приложение для рисования на iPhone, которое тормозит, когда я использую аэрозольный баллончик. Но когда я проверяю утечки, запустив приложение с утечками, утечки не отображаются. Все остальные инструменты работают нормально, они могут помочь мне в решении этой проблемы.

enter image description here

Мой код класса инструментов для аэрозольных баллончиков выглядит следующим образом:

    - init {
    if ((self = [super init])) 
    { 
        trackingTouches = [[NSMutableArray array] retain]; 
        startPoints = [[NSMutableArray array] retain]; 
        paths = [[NSMutableArray array] retain];
    } 
    return self;
}

- (void)activate { } - (void)deactivate {

    [trackingTouches removeAllObjects]; 
    [startPoints removeAllObjects]; 
    [paths removeAllObjects];

} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        //  UIView *touchedView = [delegate viewForUseWithTool:self];
    UITouch *theTouch = [touches anyObject];
    UIView *touchedView = [delegate viewForUseWithTool:self]; 
    endPoint = [theTouch locationInView:touchedView];

    for (UITouch *touch in [event allTouches]) {
        // CGFloat lineWidth=10;

            // remember the touch, and its original start point, for future
        [trackingTouches addObject:touch];
        CGPoint location = [touch locationInView:touchedView];
        [startPoints addObject:[NSValue valueWithCGPoint:location]];
        UIBezierPath *path = [UIBezierPath bezierPath];

        path.lineCapStyle = kCGLineCapRound;
        [path moveToPoint:location];
        [path setLineWidth:delegate.strokeWidth];
        [path addLineToPoint:location];
        [paths addObject:path];
    }   
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
    [self deactivate];
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
//  UITouch *theTouch = [touches anyObject];
//  UIView *touchedView = [delegate viewForUseWithTool:self]; 
        //endPoint = [theTouch locationInView:touchedView];

    for (UITouch *touch in [event allTouches]) 
    { // make a line from the start point to the current point 
        NSUInteger touchIndex = [trackingTouches indexOfObject:touch]; 
            // only if we actually remember the start of this touch... 
        if (touchIndex != NSNotFound) {
            UIBezierPath *path = [paths objectAtIndex:touchIndex];
            PathDrawingInfo *info = [PathDrawingInfo pathDrawingInfoWithPath:path fillColor:[UIColor clearColor] strokeColor:delegate.strokeColor];
            [delegate addDrawable:info];
            [trackingTouches removeObjectAtIndex:touchIndex];
            [startPoints removeObjectAtIndex:touchIndex];
            [paths removeObjectAtIndex:touchIndex];
        }
    } 
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
        //  UIView *touchedView = [delegate viewForUseWithTool:self]; 
    UITouch *theTouch = [touches anyObject];
    UIView *touchedView = [delegate viewForUseWithTool:self]; 
    currentpoint = [theTouch locationInView:touchedView];
        //currentpoint.y -=20;
        //[self drawCircle];
    for (UITouch *touch in [event allTouches]) {
        CGFloat lineWidth=10;

            // make a line from the start point to the current point 
        NSUInteger touchIndex = [trackingTouches indexOfObject:touch]; 
        UIBezierPath *path = [UIBezierPath bezierPath];
        if (touchIndex != NSNotFound) {
            // CGPoint location = [touch locationInView:touchedView]; 
            UIBezierPath *path = [paths objectAtIndex:touchIndex]; UIBezierPath *circle = [UIBezierPath bezierPathWithOvalInRect:CGRectMake((currentpoint.x-lineWidth),( currentpoint.y-lineWidth), lineWidth*2, lineWidth*2)];
        NSInteger i,x,y;
        NSInteger modNumber =5*(int)lineWidth;
        for (i = 0; i < (lineWidth*lineWidth)/2; i++) {
            do {
                x = (random() % modNumber)+currentpoint.x - lineWidth*2;
                y = (random() % modNumber)+currentpoint.y - lineWidth*2;
            } while (![circle containsPoint:CGPointMake(x,y)]);

            [path appendPath:[UIBezierPath bezierPathWithRect:CGRectMake(x,y,0.0025,0.0025)]];
        }

        [path moveToPoint:currentpoint];
        [path setLineWidth:delegate.strokeWidth];
        [path addLineToPoint:currentpoint];
                    // only if we actually remember the start of this touch... 
        }  
         [paths addObject:path];;

    } 
}
- (void)drawTemporary {
    for (UIBezierPath *path in paths) { 
        [delegate.strokeColor setStroke]; 
        [path stroke];
    }
}
- (void)dealloc {
    [trackingTouches release]; 
trackingTouches = nil; 
[startPoints release]; 
startPoints = nil; 
[paths release]; 
paths = nil;
self.delegate = nil;
    [super dealloc];
}
6
задан Cœur 5 December 2018 в 05:43
поделиться