2011-03-10 4 views
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 통화로 얻었다 :

답변

0

문제점이 행 하였다. 교훈 : 웹 사이트에서 얼마나 신뢰할 수 있는지에 관계없이 항상 얻은 소스 코드를 다시 확인하십시오.

관련 문제