Я обнаружил, что, как и предсказывалось, когда я записывал изображение в файл, мой пользовательский интерфейс был заблокирован на время, что было неприемлемо. Когда я записываю изображение в файл, я публикую NS-уведомление, чтобы я мог выполнять некоторые другие специфические задания, связанные с этим завершением. Оригинальный рабочий, но код блокировки интерфейса:
-(void)saveImageToFile {
NSString *imagePath = [self photoFilePath];
BOOL jpgData = [UIImageJPEGRepresentation([[self captureManager] stillImage], 0.5) writeToFile:imagePath atomically:YES];
if (jpgData) {
[[NSNotificationCenter defaultCenter] postNotificationName:kImageSavedSuccessfully object:self];
}
Чтобы избежать блокировки пользовательского интерфейса, я поместил writeToFile: в очередь Grand Central Dispatch, чтобы она работала как параллельный поток. Но когда запись завершена и поток завершен, я хочу опубликовать NSNotification. Я не могу, так как код показан здесь, потому что он находится в фоновом потоке. Но это та функция, которую я хочу реализовать, понимая, что это не выполнимый код:
-(void)saveImageToFile {
NSString *imagePath = [self photoFilePath];
// execute save to disk as a background thread
dispatch_queue_t myQueue = dispatch_queue_create("com.wilddogapps.myqueue", 0);
dispatch_async(myQueue, ^{
BOOL jpgData = [UIImageJPEGRepresentation([[self captureManager] stillImage], 0.5) writeToFile:imagePath atomically:YES];
dispatch_async(dispatch_get_main_queue(), ^{
if (jpgData) {
[[NSNotificationCenter defaultCenter] postNotificationName:kImageSavedSuccessfully object:self];
}
});
});
}
Каков правильный механизм отправки этого уведомления для получения желаемой функциональности?