这就是我创建线程的方式:

readFromWebThread = [[NSThread alloc] initWithTarget:self selector:@selector(loadThread:) object:urlStr];


这就是我阻止它的方式:

if ([readFromWebThread isExecuting]) {
    [readFromWebThread cancel];
}


这就是我在线程中所讲的:

-(void)loadThread:(NSString*)urlStr {
    while (YES) {
        //MyStuff

        [NSThread sleepForTimeInterval:kSleepBetweenLoading];
    }
}


问题是,即使调用cancel线程方法,该线程也会继续调用。
知道是什么错误吗?

最佳答案

从文档:

-cancel:“更改接收器的取消状态以指示它应该退出。”

==>您必须实现线程的取消!如果它入睡,它永远不会被取消

例如

while(YES) {
    //do a piece of work
    if([NSThread currentThread].state == canceled)
        break;
}

10-07 19:03
查看更多