您如何在Objective C中触发队列中的函数和方法?我的意思是这样的:
方法1然后方法2然后方法3,我应该使用NSThread
吗?
答案 0 :(得分:3)
一种方法是使用Queue
或Stack
函数指针,然后执行并弹出最顶层的方法,直到没有剩下任何方法。显然,您可以使用数组和currentIndex
变量执行此操作(从currentIndex
增加0
到arraySize - 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);
}
}