在我的应用程序中,我有四种方法,如
- (void)Method1;
- (void)Method2;
- (void)Method3;
- (void)Method4;
我想一个接一个地执行这些方法。我在某些来源中搜索这个,他们在某些来源使用“dispatch_Time”,他们正在使用“NSThread sleepForTimeInterval:”但在我的应用程序中,我不想使用时间执行这些方法。如果先前的方法执行完成,我想执行它们。我怎么能这样做?
答案 0 :(得分:4)
正确的方法是将方法排入串行队列。
串行队列一次执行一个任务,从而确保只在执行了所有前任任务后才执行任务。
有几种方法可以实现您的目标。我将描述其中两个,一个使用Grand Central Dispatch,另一个使用NSOperationQueue
。
创建一个队列,您将排队任务。一个好的做法是将队列保持为实例变量,以便您可以从实例方法访问它(与NSOperationQueue
不同,默认情况下,自定义调度队列默认是串行的,即它们一次执行一个任务):
dispatch_queue_t my_queue = dispatch_queue_create("com.suresh.methodsqueue", NULL);
self.methods_queue = my_queue;
将您的方法一个接一个地排入指定的队列:
dispatch_async(self.methods_queue, ^{ [someObject method1] });
dispatch_async(self.methods_queue, ^{ [someObject method2] });
dispatch_async(self.methods_queue, ^{ [someObject method3] });
dispatch_async(self.methods_queue, ^{ [someObject method4] });
Further re GCD in Apple's developer guides.
初始化队列:
NSOperationQueue* aQueue = [[NSOperationQueue alloc] init];
self.methods_queue = aQueue;
确保队列是串行的:
[self.methods_queue setMaxConcurrentOperationCount:1]
将方法排队到队列中,有几种方法,下面需要的代码量最少:
[self.methods_queue addOperationWithBlock:^{ [someObject method1] }];
[self.methods_queue addOperationWithBlock:^{ [someObject method2] }];
[self.methods_queue addOperationWithBlock:^{ [someObject method3] }];
[self.methods_queue addOperationWithBlock:^{ [someObject method4] }];
答案 1 :(得分:2)
如果这些方法在他们完成工作之前不会返回,请按顺序调用它们:
[self Method1];
[self Method2];
[self Method3];
[self Method4];
否则,您需要使用调度组之类的东西。
答案 2 :(得分:-2)
在某处调用第一个方法,如
[self (void)Method1];
并实现类似
(void)Method1{
// logic here
[self (void)Method2];
}
(void)Method2{
// logic here
[self (void)Method3];
}
依此类推...............