线程中的NSRunlock



我遇到问题

这是代码

- (void)start{
    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantFuture]];
}
- (void)nlog{
    NSLog(@"cool");
}

- (void)main{

    thread = [[NSThread alloc] initWithTarget:self selector:@selector(start) object:nil];
    [thread start];

    [self performSelector:@selector(nlog) onThread:thread withObject:nil waitUntilDone:NO];
}

当我呼叫时

[self performSelector:@selector(nlog) onThread:thread withObject:nil waitUntilDone:NO];

线程将继续运行,稍后我可以在线程中做一些事情;

但如果我不调用它,线程将立即退出,并且永远不能使用线程做任何事情,为什么?

启动线程时,如果不向运行循环添加任何源,则运行循环将立即返回。然后线程完成。

结账:

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1

首先,我认为您对使用线程没有正确的想法

thread = [[NSThread alloc] initWithTarget:self selector:@selector(start) object:nil];
[thread start];

不要重写NSThread的"start"方法,应该重写"main"方法。

其次,如果您想在线程中创建运行循环,应该有一个while循环,如下所示:

while (condition)
    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantFuture]];

顺便说一句,有关NSRunLoop的用法的更多详细信息,请参阅我的回答:让NSRunLoop等待设置标志的最佳方法?

相关内容

  • 没有找到相关文章

最新更新