Классическая проблема производителя / потребителя.Ваш поток производителя, вероятно, превосходит основной поток (потребитель).Я бы порекомендовал сохранить очередь изображений (вместо одного mImage) под защитой блокировки, на которую вы ставите изображения (из фоновой очереди), и снимать изображения с вашей основной очереди.Или вы можете использовать GCD, что делает это еще проще.Вместо использования mImage для удержания созданного изображения, вы можете просто использовать блок, который сохранит изображение, а затем установить его в виде изображения в основной очереди.Что-то вроде:
thread2loop() {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
while (...) {
__block id self_block = self; // (don't want to retain self in the block)
UIImage *img = [[UIImage alloc] initWithCGImage:quartzImage scale:1.0 orientation:UIImageOrientationUp];
dispatch_async(dispatch_get_main_queue(), ^{
block_self.imageView.image = img;
[img release];
});
}
[pool drain]; // release is outdated for autorelease pools
}
Предупреждение. Если вы сделаете это слишком много, устройство быстро выйдет из памяти и будет убито ваше приложение.Возможно, вы захотите убедиться, что вы используете эту технику только для создания небольшого количества изображений.