如何在其他线程上排队我的方法回调?

时间:2012-03-02 15:15:50

标签: objective-c ios multithreading

我经常得到一些我需要在其他线程上处理的回调,我想在一个线程上排队这些处理方法,所以它们会按顺序运行。我不想使用原始NSThread(因为工作量太大)而且不想使用GCD(因为需要支持iOS 3.1)。开始看NSOperation但是需要子类化,传递所需的数据等等。然后开始考虑runLoops ......无论如何,实现任务的方便方法是什么?

1 个答案:

答案 0 :(得分:1)

NSOperation设置比运行循环更清晰。你没有说你的回调是什么。它们有功能吗?选择?块?对象

您的NSOperation子类只需覆盖main并提供将回调传递给操作的方法。

@interface MyOperation : NSOperation
{
@private 
    CallbackType callback; // is e.g. a function pointer
    void* context;         // a parameter for the callback as an example
}
-(id) initWithCallback: (CallbackType) newCallback;
            andContext: (void*) newContext;
@end

@implementation MyOperation

-(id) initWithCallback: (CallbackType) newCallback
{
    self = [super init];
    if (self != nil)
    {
        callback = newCallback;
        context = newContext;
    }
    return self;
}

-(void) main
{
    callback(context);
}

@end