2012-03-31 18 views
0

こんにちはObjective Cのキューで関数とメソッドを起動するにはどうすればよいですか?私はこのようなものを意味する:メソッドを段階的に実行

方法1次に方法2、方法3、NSThreadを使うべきですか?

+0

あなたはなど、法1は、方法2を呼び出す前に終了するのを待つ必要がありますか:ループなど

ここでは、完全なコードをテストしているのですか? – user523234

+0

@ user523234:これのような何か –

答えて

0

私は、GCDシリアルキューとNSSelectorFromStringメソッドの使用に関わるさまざまな解決策を持っています。

第一:あなたの方法で配列を作成し名前

第二:GCDシリアルキューを作成します

第三:NSSelectorFromStringは、メソッドにメソッド名の文字列を変換し、A用を使用してシリアル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

1つの方法は、関数ポインタのQueueまたはStackを持って、メソッドが残されなくなるまで一番上のメソッドを実行してポップすることです。明らかに配列とcurrentIndex変数でこれを行うことができます(から0arraySize - 1まで、毎回myArray[currentIndex]に関数ポインタを実行)。関数ポインタ自体の詳細については、Function Pointers in Objective Cを参照してください。

0

NSOperationQueueを使用します。一度に1つの操作を実行するように設定することができます。その場合は、必要なメソッド呼び出しを順番に進めます。 NSInvocationOperationを使用すると、メソッド呼び出しから操作を作成できます。