title: UIBezierPath Array rendering issue (How to use CGLayerRef for optimization)
body: <p>friends, I am working with UIBezierPaths, for free hand drawing , and everything works fine, for this I am storing my paths in a path array, everything works fine, while rendering, I am looping the whole array and rendering the paths,but soon as the array count increases, I see a lag while drawing, below is my drawRect code. please help me out in finding where I am going wrong </p>
  
  <pre><code>- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
  {
  
      UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
  
      m_previousPoint2 = m_previousPoint1;
      m_previousPoint1 = [mytouch previousLocationInView:self];
      m_currentPoint = [mytouch locationInView:self];
  
      CGPoint mid1    = midPoint(m_previousPoint1, m_previousPoint2); 
      CGPoint mid2    = midPoint(m_currentPoint, m_previousPoint1);  
  
      testpath = CGPathCreateMutable();
      CGPathMoveToPoint(testpath, NULL, mid1.x, mid1.y);
  
      CGPathAddQuadCurveToPoint(testpath, NULL, m_previousPoint1.x, m_previousPoint1.y, mid2.x, mid2.y);      
  
  
      CGRect bounds = CGPathGetBoundingBox(testpath);   
  
      CGPathRelease(testpath);
  
  
      CGRect drawBox = bounds;
  
      //Pad our values so the bounding box respects our line width
      drawBox.origin.x        -= self.lineWidth * 2;
      drawBox.origin.y        -= self.lineWidth * 2;
      drawBox.size.width      += self.lineWidth * 4;
      drawBox.size.height     += self.lineWidth * 4;
  
  
      CGContextRef context = UIGraphicsGetCurrentContext();
      context = CGLayerGetContext(myLayerRef);
  
  
      [self.layer renderInContext:UIGraphicsGetCurrentContext()];      
  
      [self setNeedsDisplayInRect:drawBox];    
  
  }
  
  
  - (void)drawRect:(CGRect)rect
  {   
      CGContextRef context = UIGraphicsGetCurrentContext();
  
      if(myLayerRef == nil)
      {            
          myLayerRef = CGLayerCreateWithContext(context, self.bounds.size, NULL);
      }
  
      [self.layer renderInContext:context];   
  
  
      CGPoint mid1 = midPoint(m_previousPoint1, m_previousPoint2); 
      CGPoint mid2 = midPoint(m_currentPoint, m_previousPoint1);
  
  
      CGContextMoveToPoint(context, mid1.x, mid1.y);
      CGContextAddQuadCurveToPoint(context, m_previousPoint1.x, m_previousPoint1.y, mid2.x, mid2.y); 
      CGContextSetLineCap(context, kCGLineCapRound);
      CGContextSetLineWidth(context, self.lineWidth);
      CGContextSetStrokeColorWithColor(context, self.lineColor.CGColor);
  
      CGContextSetFlatness(context, 0.1);
  
      CGContextSetAllowsAntialiasing(context, true);
  
      CGContextStrokePath(context);
  
      [super drawRect:rect];  
  
   }
  </code></pre>
  
  <p>Code updated according to the below discussion by @borrrden    </p>
  
  <p>Regards
  Ranjit</p>