使用UIImage绘制内存警告

时间:2016-04-14 08:20:19

标签: ios objective-c uiimageview uiimage drawing

- (void)drawingViewDidPan:(UIPanGestureRecognizer*)sender
{
  CGPoint currentDraggingPosition = [sender locationInView:drawableView];

  if(sender.state == UIGestureRecognizerStateBegan){
    _prevDraggingPosition = currentDraggingPosition;
  }

  if(sender.state != UIGestureRecognizerStateEnded){
      [self drawLine:_prevDraggingPosition to:currentDraggingPosition];
  }
  _prevDraggingPosition = currentDraggingPosition;
}

-(void)drawLine:(CGPoint)from to:(CGPoint)to
{
  CGSize size = drawableView.frame.size;
  UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);

  CGContextRef context = UIGraphicsGetCurrentContext();

  [drawableView.image drawAtPoint:CGPointZero];

  CGFloat strokeWidth = 4.0;
  UIColor *strokeColor = [UIColor blackColor];

  CGContextSetLineWidth(context, strokeWidth);
  CGContextSetStrokeColorWithColor(context, strokeColor.CGColor);
  CGContextSetLineCap(context, kCGLineCapRound);


  CGContextMoveToPoint(context, from.x, from.y);
  CGContextAddLineToPoint(context, to.x, to.y);
  CGContextStrokePath(context);

  drawableView.image = UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();
}

我正在使用上面的代码来绘制UIImageView内部的Image,但是它一直在给我内存警告代码有什么问题?

我在包含图像的imageview上添加了一个imageview,然后在用户点击完成后,我通过在给定的imageview中绘制可绘制的imageview图像来构建图像。

1 个答案:

答案 0 :(得分:0)

我第一次阅读您的问题时,我知道您的代码中存在泄漏,因为它使用了图形 - 不确定这一点。我只有7个月的iOS经验。问题应该在你的drawableView.image中。您正试图获取 UIGraphicsGetImageFromCurrentImageContext()

尝试将代码包装在autoreleasepool中。

@autoreleasepool {
 // Wrap your code here...
}

最后,请确保您在主线程中运行代码。

dispatch_async(dispatch_get_main_queue(), ^{
    // dispatch in main!
});