消防方法一步一步

时间:2012-03-31 18:43:52

标签: iphone objective-c ios xcode

您如何在Objective C中触发队列中的函数和方法?我的意思是这样的:

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

3 个答案:

答案 0 :(得分:3)

一种方法是使用QueueStack函数指针,然后执行并弹出最顶层的方法,直到没有剩下任何方法。显然,您可以使用数组和currentIndex变量执行此操作(从currentIndex增加0arraySize - 1,在每个myArray[currentIndex]执行函数指针时间)。有关函数指针本身的更多详细信息,请参阅Function Pointers in Objective C

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

1st:使用您的方法名称

创建一个数组

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

第3步:使用NSSelectorFromString将方法名称字符串转换为方法,并使用for for循环将其插入到序列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);
    }
}