Огненные методы шаг за шагом - PullRequest
0 голосов
/ 31 марта 2012

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

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

Ответы [ 3 ]

3 голосов
/ 31 марта 2012

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

0 голосов
/ 31 мая 2012

У меня есть другое решение, которое использует GCD Serial Queues и метод NSSelectorFromString.

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

2-й: Создать последовательную очередь GCD

3-й: Используя NSSelectorFromString, преобразовать строку имени метода в метод и вставить ее впоследовательный Q с использованием цикла a и т. д.

Вот полный проверенный код:

- (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);
    }
}
0 голосов
/ 01 апреля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...