drawRect中的EXC_BAD_ACCESS

时间:2010-05-11 09:11:11

标签: iphone exc-bad-access drawrect

以下代码“有时”会在设备上运行时导致崩溃(EXC_BAD_ACCESS)。永远不要在模拟器上。

为了重现它,我一直在我的表视图控制器上覆盖一个模态视图控制器。它通常在模态视图控制器被解除时发生。

为什么会发生这种情况?

CGContextRef context = UIGraphicsGetCurrentContext();

//set the background of the cell
[self.backgroundColor set];
CGContextFillRect(context, rect);

// get cached image
UIImage *image = [[ImageUtil sharedInstance] getImageByRouteType:route.type];
CGSize imageSize = CGSizeMake(IMAGE_WIDTH, IMAGE_WIDTH);
// DEBUGGER STOPS ON THIS NEXT LINE, image object is fine though
[image drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];

[...]

由于

1 个答案:

答案 0 :(得分:1)

如果在NSOperationQueue这样的多胎面情况下使用drawInRect,请尝试使用锁定以避免在多个线程中调用“drawInRect”。我遇到了类似的问题并以这种方式解决了它。

@synchronized([UIImage class]){
    UIGraphicsBeginImageContext(newSize);
    CGRect rect = CGRectMake(0.0, 0.0, newSize.width, newSize.height);
    [self drawInRect: rect];
    newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

}