我正在编写一个应用程序,它需要在另一个方法完成之后运行一个方法。(常见的情况,对吗?)
我正在尝试实现链式方法。我想出的最好办法就是给performSelector:withObject:afterDelay:打电话。我只是不确定这是否是最好的方法。我已经研究了Cocos2d游戏引擎如何实现它的CCSequence类,但我不确定我是否理解它。
我怀疑块在这里会做得很好,但我不知道如何将它们用作回调对象或其他东西。
如何实现一个运行方法的机制,一个接一个?(我愿意使用计时器或块,但我不知道如何在这种情况下使用块。)
编辑:
为了澄清,我正在尝试实现一个像cocos2d的CCSequence类这样的系统,它需要几个方法并按顺序“分派”它们。像动画这样的东西,它需要比一个时钟周期更多的时间运行。
我不想阻止主线程,也不想彼此硬编码方法。Cocos2d有一个排序系统,在这个系统中,我可以将方法传入队列并按顺序运行它们。
编辑2:
另外,我希望能够取消我的排定队列,所以我不确定GCD是否与此匹配。GCD序列队列可以取消吗?
发布于 2012-08-27 11:42:39
我终于找到了我要找的东西。完井区。简单地说,我会写一个这样的方法:
- (void) performSomeActionWithCompletion:(void (^)()) completion{
[self someAction];
if(completion()){
completion();
}
}现在,我可以这样调用我的方法:
[self performSomeActionWithCompletion:^{
NSLog(@"All done! (Well, not the async stuff, but at any rate...)");
}];发布于 2012-07-08 08:52:24
您可以使用螺纹迁移技术
接下来是一个有趣的任务,名为GCD-Grand Central Dispatch
中央调度(GCD)是苹果公司( Apple .)为多核处理器和其它对称多处理systems.It系统优化应用支持而开发的一种基于线程池模式的任务并行实现技术。 GCD的工作方式是允许程序中可以并行运行的特定任务排队等待执行,并且根据处理资源的可用性,将它们调度到任何可用的处理器核上执行。 调度队列是维护任务队列(包括匿名代码块或函数)并依次执行这些任务的对象。库自动创建多个具有不同优先级级别的队列,这些队列同时执行多个任务,根据操作环境选择要运行的最佳任务数。库的客户端还可以创建任意数量的串行队列,这些队列按提交的顺序执行任务,每次一个。由于串行队列一次只能运行一个任务,因此提交给队列的每个任务对于队列上的其他任务至关重要,因此可以使用串行队列代替对竞争资源的锁定。 调度队列与其他调度队列并行执行其任务。任务的序列化仅限于单个调度队列中的任务。 在您的例子中,您可以使用串行调度队列 当您希望任务按特定顺序执行时,串行队列非常有用。串行队列一次只执行一个任务,并且总是从队列的头部提取任务。您可以使用串行队列而不是锁来保护共享资源或可变数据结构。与锁不同,串行队列确保以可预测的顺序执行任务。而且,只要您异步地将任务提交到串行队列,队列就不会死锁。 与为您创建的并发队列不同,您必须显式创建和管理要使用的任何串行队列。您可以为您的应用程序创建任意数量的串行队列,但是应该避免创建大量的串行队列,只作为尽可能多地同时执行任务的一种手段。如果要同时执行大量任务,请将它们提交到一个全局并发队列中。在创建串行队列时,请尝试标识每个队列的用途,例如保护资源或同步应用程序的某些关键行为。 dispatch_queue_t队列;queue = dispatch_queue_create("com.example.MyQueue",NULL); 此代码显示创建自定义串行队列所需的步骤。dispatch_queue_create函数接受两个参数:队列名和一组队列属性。调试器和性能工具将显示队列名,以帮助您跟踪任务的执行方式。队列属性保留给以后使用,应该为NULL。 中央调度提供了一些函数,可以让您从应用程序中访问几个常见的调度队列: 使用dispatch_get_current_queue函数进行调试或测试当前队列的标识。从块对象内部调用此函数将返回块被提交到的队列(并且它现在可能正在运行)。从块外部调用此函数将返回应用程序的默认并发队列。 使用dispatch_get_main_queue函数获取与应用程序的主线程相关联的串行调度队列。此队列是为Cocoa应用程序和在主线程上调用dispatch_main函数或配置运行循环(使用CFRunLoopRef类型或NSRunLoop对象)的应用程序自动创建的。 使用dispatch_get_global_queue函数获取任何共享并发队列。 注意:您不需要保留或释放任何全局调度队列,包括并发调度队列或主调度队列。任何保留或释放队列的尝试都将被忽略。
资料来源: 并发编程指南
发布于 2012-07-08 06:58:43
使用串行GCD队列怎么样?
专用调度队列 串行队列(也称为私有调度队列)按添加到队列的顺序一次执行一个任务。当前执行的任务运行在一个由调度队列管理的不同线程上(该线程可能因任务而异)。串行队列通常用于同步对特定资源的访问。您可以根据需要创建任意数量的串行队列,并且每个队列与所有其他队列并行运行。换句话说,如果创建四个串行队列,每个队列一次只执行一个任务,但最多有四个任务仍然可以同时执行,每个队列一个任务。有关如何创建串行队列的信息,请参阅“创建串行调度队列”。
(来源)
如果您希望在后台线程中处理所有邮件,这将非常有用。
https://stackoverflow.com/questions/11381246
复制相似问题