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來創建方法調用之外的操作。