У меня есть программа, в которой я настроил блок завершения, который работает в фоновом потоке. Внутри блока я установил CGImageRef, а затем в основном потоке установил содержимое моего слоя. Проблема в том, что иногда приложение падает в основной части потока.
Это блок завершения, в приведенном ниже коде как fullImage, так и cfFullImage объявлены в моем .h
requestCompleteBlock completionBlock = ^(id data)
{
// Seems I need to hold onto the data for use later
fullImage = (NSImage*)data;
NSRect fullSizeRect = NSMakeRect(0, 0, self.frame.size.width, self.frame.size.height);
// Calling setContents with an NSImage is expensive because the image has to
// be pushed to the GPU first. So, pre-emptively push it to the GPU by getting
// a CGImage instead.
cgFullImage = [fullImage CGImageForProposedRect:&fullSizeRect context:nil hints:NULL];
// Rendering needs to happen on the main thread or else crashes will occur
[self performSelectorOnMainThread:@selector(displayFullSize) withObject:nil waitUntilDone:NO];
};
Последняя строка моего блока завершения — вызов displayFullSize. Эта функция ниже.
- (void)displayFullSize
{
[self setContents:(__bridge id)(cgFullImage)];
}
Вы видите или знаете какую-либо причину, по которой setContents может не работать?
Спасибо Джо