如何使用块更改委托方法?

时间:2012-08-22 10:44:11

标签: objective-c ios objective-c-blocks

我想将常规委托模式转换为像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) {

}];

我该怎么做?

非常感谢你。

1 个答案:

答案 0 :(得分:2)

因此,您的类将提供一个或多个以块为参数的方法。您需要确定这些块是否应在主队列,并发后台队列或串行后台队列上运行。在后一种情况下,您的类必须创建和管理这些队列。

在某些事件之后,它们将被运行,它们将块存储在某个容器中,并且当该事件将它们排队到队列中时。或者,您可以暂停队列,添加块,并在事件发生时恢复队列。

我建议您做的是创建一个演示项目,并在开始之前尝试将代码添加到现有项目中。 GCD和块为您提供了丰富的工具集,您可以创建许多可以实现目标的解决方案。

编辑:

资源: Apple Docs: - “Grand Central Dispatch(GCD)参考” - 让您对技术的深度和广度有一个很好的了解

  • '并发和应用程序设计' - 更多相同的

  • '阻止编程主题'

Mike Ash在Friday Q&A系列文章中有几篇关于使用块和队列的精彩文章: