【发布时间】:2015-04-14 23:41:16
【问题描述】:
我需要创建一个循环,该循环应该在一个线程中一个接一个地依次执行。
我尝试使用dispatch_sync 和我的自定义串行队列myQueue 将每个操作添加到循环队列中
dispatch_queue_t myQueue = dispatch_queue_create("samplequeue", NULL);
void (^myBlock)() = ^{
//a few seconds long operation
};
for (int i = 0; i < 10; ++i) {
dispatch_sync(myQueue, myBlock);
}
但它不起作用。
我也试过dispatch_apply,但不起作用。
我还尝试在没有循环的情况下将操作添加到我的队列中。
dispatch_sync(myQueue, myBlock);
dispatch_sync(myQueue, myBlock);
dispatch_sync(myQueue, myBlock);
但是没有任何效果...那么,为什么我不能这样做呢?
我需要它来节省内存。每个操作都需要一些内存,完成后保存结果。所以,下一个操作可以重用这块内存。 当我手动运行它们时(每次完成上一个操作时点击屏幕上的按钮)我的应用程序会占用一点内存,但是当我使用循环执行时,它们会一起运行并占用大量内存。
谁能帮我处理这个案子?也许我应该使用@synchronize()、NSOperation & NSOperationQueue 或 NSLock 之类的东西?
【问题讨论】:
-
Ummm..."concurrently" 表示它们都同时运行。并发操作可能对某些东西具有串行访问权限,这会一次发生一个。
-
您是否考虑过在目标线程上编写一个循环?
-
Hot Licks,你能写一个代码示例吗?
标签: ios objective-c multithreading grand-central-dispatch