因此,解決方案是eas y:
你不想凍結UI --->使用背景與調度程序執行;
你想要備份後執行某事 --->通過塊完成。
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex != alertView.cancelButtonIndex){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^
{
__weak typeof (self) weakSelf = self;
[self backupDataWithCompletion:^(NSData *data) {
[weakSelf doSomethingWithData:data];
}];
});
}
}
- (void)backupDataWithCompletion:(void (^)(NSData *))completionBlock
{
NSData *data = //Do something
completionBlock(data);
}
或者另一種解決方案(那麼優雅)是插入在串行隊列不主線程上工作的任務:
因此,init這個隊列在init
方法:
_queue = dispatch_queue_create("backupQueue", DISPATCH_QUEUE_SERIAL);
隊列是一個屬性或VAR dispatch_queue_t queue;
然後:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex != alertView.cancelButtonIndex){
dispatch_async(queue,^
{
[self backupData];
});
dispatch_async(queue,^
{
[self doSomethingWithData];
});
}
}
在後臺執行長時間運行的操作。 – rmaddy 2014-10-17 23:04:56