从我读到的内容来看,Core Graphics应该是线程安全的。但是,当我在后台线程中运行下面的代码时(通过NSOperationQueue),我的Cocoa应用程序的CPU几乎达到100%并且程序没有响应。
如果我从主线程运行相同的代码,它可以正常工作。
- (CGImageRef) createResizedImageFrom:(CGImageRef)image withSize:(CGSize) size {
CGColorSpaceRef colorspace = CGImageGetColorSpace(image);
if (CGColorSpaceGetModel(colorspace) == kCGColorSpaceModelIndexed) {
CGColorSpaceRelease(colorspace);
NSLog(@"Indexed color space not supported.");
return nil;
}
CGContextRef context = CGBitmapContextCreate(NULL, size.width, size.height,
CGImageGetBitsPerComponent(image),
CGImageGetBytesPerRow(image),
colorspace,
kCGImageAlphaPremultipliedFirst);
CGColorSpaceRelease(colorspace);
if(context == NULL)
return nil;
CGContextDrawImage(context, CGRectMake(0, 0, size.width, size.height), image);
CGImageRef imgRef = CGBitmapContextCreateImage(context);
CGContextRelease(context);
return imgRef;
}
我从调试器暂停了该过程,但我在线程堆栈跟踪中找不到任何内容。我不知道是什么导致CPU飙升。除了使上面的代码线程安全之外,还有什么我需要做的吗?
谢谢,Mark。
答案 0 :(得分:0)
问题在于这一行:
CGColorSpaceRelease(colorspace);
通过get
调用获得颜色空间,因此调用者不得释放它。获得的经验:无论网站多么值得信赖,都要仔细检查从网上获得的源代码......