0
코어 그래픽은 스레드로부터 안전합니다. 그러나 NSOperationQueue를 통해 백그라운드 스레드에서 아래의 코드를 실행하면 거의 100 %로 내 코코아 응용 프로그램의 CPU가 상승하고 프로그램이 응답하지 않게됩니다.백그라운드 스레드에서 CAImageRef 크기를 조정하면 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가 스파이크를 일으키는 지 알지 못합니다. 위 코드를 안전하게 할 수있는 추가 작업이 있습니까?
감사합니다. 이에 따라 호출자가 해제되어서는 안된다
CGColorSpaceRelease(colorspace);
색 공간은 get
통화로 얻었다 :