我想将常规委托模式转换为像UIView动画那样的异步块。我想做Apple用UIView动画做的事情,我想替换像这样的东西
[UIView beginAnimations:nil context:nil];
[UIview setAnimationDuration:0.25f];
[UIView setAnimationDidStopSelector:@selector(myStopSelector)];
[UIView setAnimationDelegate:self];
// Animation stuff
[UIView commitAnimations];
// In another part of my class
- (void)myStopSelector {
// Completion stuff
}
有这样的东西
[UIView animateWithDuration:0.25f animations:^{
// Animation stuff
} completion:^(BOOL finished) {
// Completion stuff
}]
就我而言,我在等待异步操作时想要这种行为;现在我正在添加一个监听某个协议的观察者来完成操作,结果。我想避免使用委托模式来使用像TWRequest那样的asynchonorus完成处理程序块
[myTWRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
}];
我该怎么做?
非常感谢你。
答案 0 :(得分:2)
因此,您的类将提供一个或多个以块为参数的方法。您需要确定这些块是否应在主队列,并发后台队列或串行后台队列上运行。在后一种情况下,您的类必须创建和管理这些队列。
在某些事件之后,它们将被运行,它们将块存储在某个容器中,并且当该事件将它们排队到队列中时。或者,您可以暂停队列,添加块,并在事件发生时恢复队列。
我建议您做的是创建一个演示项目,并在开始之前尝试将代码添加到现有项目中。 GCD和块为您提供了丰富的工具集,您可以创建许多可以实现目标的解决方案。
编辑:
资源: Apple Docs: - “Grand Central Dispatch(GCD)参考” - 让您对技术的深度和广度有一个很好的了解
'并发和应用程序设计' - 更多相同的
'阻止编程主题'
Mike Ash在Friday Q&A系列文章中有几篇关于使用块和队列的精彩文章: