我遇到问题
这是代码
- (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等待设置标志的最佳方法?