2011-03-10 73 views
0

從我讀到的,核心圖形應該是線程安全的。然而,當我在後臺線程(通過NSOperationQueue)運行下面的代碼時,我的Cocoa應用程序的CPU幾乎達到100%,程序變得沒有響應。在後臺線程調整CAImageRef導致100%的CPU和崩潰

如果我從主線程運行相同的代碼,它工作正常。

- (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飆升。除了使上面的代碼線程安全之外,還有什麼需要做的嗎?

謝謝,馬克。

回答

0

問題是這樣的線:通過get呼叫得到

CGColorSpaceRelease(colorspace); 

色彩空間,因此是不能由調用者釋放。獲得的經驗:總是仔細檢查你從網上獲得的源代碼,無論該網站有多可信...