0

我有问题

这是代码

- (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];

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

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

4

2 回答 2

0

当你启动一个线程时,如果你没有在runloop中添加任何source,runloop会立即返回。然后线程结束了。

查看:

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

于 2013-12-20T07:21:27.697 回答
-1

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

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 等待设置标志的最佳方法?

于 2013-08-18T07:35:44.777 回答