title: UIBezierPath drawing takes up 100% of CPU
body: <p>I have a UIBezierPath is drawn on the screen every time the user's touch is moved. This works fine on my simulator on a Mac Pro, but as soon as I moved it to a physical device, the drawing began to lag a lot. Using instruments, I checked the CPU usage, and it hits 100% while the user is drawing.</p>
  
  <p>This becomes quite the problem because I have an NSTimer that is supposed to fire at 30fps, but when the CPU is overloaded by the drawing, the timer fires at only around 10fps.</p>
  
  <p>How can I optimize the drawing so that it doesn't take 100% of the CPU?</p>
  
  <pre><code>UITouch* lastTouch;
  
  - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  {
      if(lastTouch != nil)
          return;
  
      lastTouch = [touches anyObject];
      [path moveToPoint:[lastTouch locationInView:self]];
      [self drawDot];
  }
  
  - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
  {
      if([touches anyObject] == lastTouch)
          [self drawDot];
  }
  
  - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
  {
      if([touches anyObject] == lastTouch)
          lastTouch = nil;
  }
  
  - (void)drawDot
  {
      if(!self.canDraw)
          return;
  
      [path addLineToPoint:[lastTouch locationInView:self]];
      [self setNeedsDisplayInRect:CGRectMake([lastTouch locationInView:self].x-30, [lastTouch locationInView:self].y-30, 60, 60)];
  }
  
  - (void)drawRect:(CGRect)rect
  {    
      CGColorRef green = [UIColor green].CGColor;
      CGContextRef context = UIGraphicsGetCurrentContext();
  
      CGColorRef gray = [UIColor gray].CGColor;
      CGContextSetStrokeColor(context, CGColorGetComponents(gray));
      [shape stroke];
  
      CGContextSetStrokeColor(context, CGColorGetComponents(green));
      [path stroke];
  }
  </code></pre>