2012-03-31 3 views
0

Привет, как я могу запускать функции и методы в очереди в Objective C? Я имею в виду примерно так:Пошаговые методы шаг за шагом

метод 1, затем метод 2, затем метод 3, следует ли использовать NSThread?

+0

вам нужно ждать method1 закончить перед вызовом method2 и т.д. ли? – user523234

+0

@ user523234: да что-то вроде этого –

ответ

0

У меня есть другое решение, которое связано с использованием последовательных очередей GCD и метода NSSelectorFromString.

1-й: Создание массива с вашими методами имена

вторые: Создание последовательной очереди НОДА

третьи: Использование 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

Один из способов - использовать указатели функций Queue или Stack, затем выполнить и выставить самый верхний метод до тех пор, пока не останется никаких методов. Очевидно, вы можете сделать это с помощью массива и переменной currentIndex (приращение currentIndex от 0 до arraySize - 1, выполняя указатель функции на myArray[currentIndex] каждый раз). См. Function Pointers in Objective C для получения дополнительной информации о самих указателях функций.

0

Я использовал бы NSOperationQueue. Вы можете настроить его для запуска одной операции за раз, и в этом случае она будет продолжать шаг за шагом через вызовы методов, которые вы хотите. Вы можете использовать NSInvocationOperation для создания операций из вызовов методов.

Смежные вопросы