2012-03-31 73 views
0

嗨我怎样才能在目标C中的队列中激发函数和方法?我的意思是这样的:一步一步的火法

方法1然后方法2然后方法3,我应该使用NSThread

+0

你需要等待方法1调用方法2,等前完成? – user523234 2012-04-01 15:30:12

+0

@ user523234:是这样的 – 2012-04-01 16:07:46

回答

0

我有一个不同的解决方案,涉及使用GCD串行队列和NSSelectorFromString方法。

1:用你的方法创建一个数组名

第二:创建一个GCD串行队列

3:使用NSSelectorFromString到方法名字符串转换为方法,并将其插入使用了一个串行Q循环等

下面是完整的测试代码:

- (IBAction)buttonSerialQPressed:(id)sender 
{ 
    dispatch_queue_t serialdQueue; 
    serialdQueue = dispatch_queue_create("com.mydomain.testbed.serialQ", NULL); 

    NSArray *arrayMethods = [NSArray arrayWithObjects:@"method1", @"method2", @"method3", nil]; 
    for (NSString *methodName in arrayMethods) 
    { 
     dispatch_async(serialdQueue, ^{ 
      SEL myMethod = NSSelectorFromString(methodName); 
      [self performSelector:myMethod]; 
     }); 
    } 
} 

-(void)method1 
{ 
    for (int i=0; i<1000; i++) 
    { 
     NSLog(@"method1 i: %i", i); 
    } 
} 

-(void)method2 
{ 
    for (int i=0; i<10; i++) 
    { 
     NSLog(@"method2 i: %i", i); 
    } 
} 

-(void)method3 
{ 
    for (int i=0; i<100; i++) 
    { 
     NSLog(@"method3 i: %i", i); 
    } 
} 
3

一种方法是获得函数指针的QueueStack,然后执行并弹出最顶端的方法,直到没有方法离开。很明显,你可以用一个数组和一个currentIndex变量(从0arraySize - 1增加currentIndex,每次在myArray[currentIndex]处执行函数指针)来做到这一点。有关函数指针本身的更多细节,请参阅Function Pointers in Objective C

0

我会用NSOperationQueue。您可以设置它每次运行一个操作,在这种情况下,它将逐步执行所需的方法调用。您可以使用NSInvocationOperation来创建方法调用之外的操作。