У меня есть приложение, которое рисует линии в контексте кварца.Приложение начинает рисовать, когда пользователь перемещает палец по экрану.
Во время срабатывания TouchesMoved я сохраняю кварцевый контекст в файл PNG (я знаю, что сохранение файла идет медленно ... Я пыталсячтобы сделать это с памятью, но использование памяти приложения резко возросло, поэтому я пытаюсь сделать это на диск).
Поскольку контекст сохраняется в этом, я делаю это при перемещениях
if (firstMove) // first movement after touchesbegan
[NSThread detachNewThreadSelector:@selector(newThreadUNDO)
toTarget:self
withObject:nil];
firstMove = NO
}
и затем у меня есть
- (void) newThreadUNDO {
NSAutoreleasePool* p = [[NSAutoreleasePool alloc] init];
[NSThread setThreadPriority:0.1];
[NSThread sleepForTimeInterval:0.0];
[self performSelectorOnMainThread:@selector(copyUNDOcontext) withObject:nil waitUntilDone:NO];
[p release];
}
и
- (void) copyUNDOcontext {
CGFloat w = board.image.size.width;
CGFloat h = board.image.size.height;
CGRect superRect = CGRectMake(0,0, w, h);
CGSize size = CGSizeMake(w, h);
UIGraphicsBeginImageContext(size);
CGContextRef new = UIGraphicsGetCurrentContext();
// lineLayer is the layer context I need to save
CGContextDrawLayerInRect(new, superRect, lineLayer);
UIImage *imagem = UIGraphicsGetImageFromCurrentImageContext();
[self saveTempImage:imagem :@"UNDO.png"];
UIGraphicsEndImageContext();
}
Проблема в том, что, как только пользователь начинает двигаться, новый поток запускается, но даже этот новый поток становитсяс низким приоритетом основной поток все еще зависает примерно на полсекунды (возможно, пока файл сохраняется).
Почему это?
Как мне решить эту проблему?
спасибо.