【问题标题】:How to queue my method callbacks on other thread?如何在其他线程上排队我的方法回调?
【发布时间】:2012-03-02 15:15:49
【问题描述】:

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

【问题讨论】:

  • 线程从来都不是简单的。使用它们时,您总是需要做一些工作。

标签: objective-c ios multithreading


【解决方案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

【讨论】:

  • 我正在使用套接字流,当从流中读取数据时,我正在调用 - (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent。我想将读取流的处理放入队列中。但是我需要通过(有一个处理程序来处理当前的 theStream,指向声明的 inputStream 和 outputStream 的指针,传递缓冲区(NSMutableData)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 2011-06-04
  • 2015-04-19
  • 2015-03-22
  • 2023-03-21
相关资源
最近更新 更多