1

我想将常规委托模式转换为 UIView 动画那样的异步块。我想做苹果对 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
}]

就我而言,我在等待异步操作时想要这种行为;现在我正在添加一个观察者,它监听某个协议以完成操作,并获得结果。我想避免使用委托模式来使用像 TW​​Request 这样的异步完成处理程序块

[myTWRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {

}];

我怎样才能做到这一点?

非常感谢。

4

1 回答 1

2

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

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

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

编辑:

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

  • “并发和应用程序设计” - 更多相同

  • '块编程主题'

Mike Ash 在他的周五问答系列中有几篇关于使用块和队列的精彩文章:

于 2012-08-22T12:10:44.057 回答