代码之家  ›  专栏  ›  技术社区  ›  Vivin Paliath

这是Objective-C中NSThread可以接受的习惯用法吗?

  •  0
  • Vivin Paliath  · 技术社区  · 12 年前

    我有一个基于代理的小型建模框架,作为项目的一部分正在编写。不同的代理都在自己的线程中运行,并且由一个supervisor类控制它们的生命周期。因此,supervisor类可以取消这些线程。我知道有一个 isCancelled 上的方法 NSThread 。使用它,以下习语可以接受吗

    #import <Foundation/Foundation.h>
    #import "BugThread.h"
    #import "Bug.h"
    
    @implementation BugThread
    
    - (id) initWithBug: (Bug*) aBug {
    
        if((self = [super init])) {
            [bug autorelease];
            bug = [aBug retain];
        }
    
        return self;
    }
    
    - (void) main {
    
        GSRegisterCurrentThread();
    
        while(![self isCancelled]) {
            //bug does its stuff
        }
    }
    
    1 回复  |  直到 12 年前
        1
  •  3
  •   jscs    12 年前

    我想这么说,因为这在 the docs 以下为:

    如果您的线程支持取消,它应该定期调用此方法,如果返回YES则退出。

    我建议你看一下 NSOperation NSOperationQueue 虽然它们的目的是在代表您管理实际线程的同时允许这种并发性。看见 "Operation Queues" 在《并发编程指南》中。