在iOS中一个接一个地执行方法

时间:2014-03-20 06:41:42

标签: ios iphone objective-c ios7

在我的应用程序中,我有四种方法,如

- (void)Method1;  
- (void)Method2;  
- (void)Method3;  
- (void)Method4;

我想一个接一个地执行这些方法。我在某些来源中搜索这个,他们在某些来源使用“dispatch_Time”,他们正在使用“NSThread sleepForTimeInterval:”但在我的应用程序中,我不想使用时间执行这些方法。如果先前的方法执行完成,我想执行它们。我怎么能这样做?

3 个答案:

答案 0 :(得分:4)

解决方案概述

正确的方法是将方法排入串行队列。

串行队列一次执行一个任务,从而确保只在执行了所有前任任务后才执行任务。

有几种方法可以实现您的目标。我将描述其中两个,一个使用Grand Central Dispatch,另一个使用NSOperationQueue

Grand Central Dispatch

  1. 创建一个队列,您将排队任务。一个好的做法是将队列保持为实例变量,以便您可以从实例方法访问它(与NSOperationQueue不同,默认情况下,自定义调度队列默认是串行的,即它们一次执行一个任务): dispatch_queue_t my_queue = dispatch_queue_create("com.suresh.methodsqueue", NULL); self.methods_queue = my_queue;

  2. 将您的方法一个接一个地排入指定的队列: 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] });

  3. Further re GCD in Apple's developer guides.

    操作队列

    1. 初始化队列: NSOperationQueue* aQueue = [[NSOperationQueue alloc] init]; self.methods_queue = aQueue;

    2. 确保队列是串行的: [self.methods_queue setMaxConcurrentOperationCount:1]

    3. 将方法排队到队列中,有几种方法,下面需要的代码量最少: [self.methods_queue addOperationWithBlock:^{ [someObject method1] }]; [self.methods_queue addOperationWithBlock:^{ [someObject method2] }]; [self.methods_queue addOperationWithBlock:^{ [someObject method3] }]; [self.methods_queue addOperationWithBlock:^{ [someObject method4] }];

    4. Further re Operation Queues in Apple's developer guides.

答案 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];
}

依此类推...............