这是Objective-C中NSThread的可接受成语吗?

时间:2012-08-20 00:39:57

标签: objective-c nsthread gnustep

我有一个基于代理的小型建模框架,我正在写作项目的一部分。不同的代理都在自己的线程中运行,而主管类控制着它们的生命周期。所以主管类可以取消这些线程。我知道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 个答案:

答案 0 :(得分:3)

我会这样说,因为the docs中明确说明了这一点:

  

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

我建议您先查看NSOperationNSOperationQueue。它们旨在允许您在代表您管理实际线程时实现这种并发性。请参阅“并发编程指南”中的"Operation Queues"