我目前正在学习IOS线程编程......我遇到了一个问题:
我的代码来了,请好好看看:
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSThread *t1 = [[NSThread alloc]initWithTarget:[MyThread class] selector:@selector(myMethod:) object:Nil];
[t1 start];
}
return 0;
}
#import "MyThread.h"
@implementation MyThread
+ (void)myMethod:(id)param
{
@autoreleasepool {
NSLog(@"called...");
}
}
@end
但是,当我运行程序时,虽然没有错误,但控制台上没有打印任何消息。似乎myMethod没有被执行。我想知道是否有人可以给我一些建议。它已经让我发疯了。
非常感谢提前。
答案 0 :(得分:1)
您的应用程序的主线程在您的其他线程有机会处理任何内容之前退出。
如果您在main方法的sleep(1000)
语句之前的任何位置添加一个简单的return 0
语句,它将起作用。
答案 1 :(得分:1)
您的应用程序在线程执行NSLog
之前终止。
NSThread
创建一个分离的主题,请参阅Apple的Thread Programming Guide,其中包含:
重要:在应用程序退出时,分离的线程可以立即终止,但可连接的线程不能。必须先连接每个可连接线程,然后才允许进程退出。因此,在线程正在执行不应中断的关键工作(例如将数据保存到磁盘)的情况下,可连接线程可能更为可取。
要创建可连接线程,因此能够阻止主线程直到所有可连接线程完成,您可以使用 pthread - 在上面的指南中介绍。< / p>
Java线程模型类似,但使用的术语略有不同。默认情况下,Java线程是可连接的,Java应用程序将继续执行,直到所有此类线程都已终止。 Java线程可以转换为守护程序线程,与NSThread
个线程一样,它会在应用程序退出时自动终止。