0

我目前正在学习 IOS Threading 编程...遇到了一个问题:

我的代码来了,请看一下:

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 没有执行。我想知道是否有人可以给我一些建议。它已经把我逼疯了。

提前谢谢了。

4

2 回答 2

1

您的应用程序在线程执行之前终止NSLog

NSThread创建一个分离的线程,请参阅 Apple's Thread Programming Guide,其中来自:

重要:在应用程序退出时,分离的线程可以立即终止,但可连接的线程不能。在允许进程退出之前,必须加入每个可连接线程。因此,在线程正在执行不应中断的关键工作(例如将数据保存到磁盘)的情况下,可连接线程可能更可取。

要创建一个可连接线程,从而能够阻塞主线程,直到所有可连接线程都完成,您可以使用pthread - 在上述指南中介绍。

Java 线程模型类似,但使用的术语略有不同。默认情况下,Java 线程是可连接的,Java 应用程序将继续执行,直到所有此类线程都终止。Java 线程可以转换为守护线程,与NSThread线程一样在应用程序退出时自动终止。

于 2013-07-25T19:26:43.953 回答
1

在您的其他线程有机会处理任何内容之前,您的应用程序的主线程正在退出。

如果您在main 方法中sleep(1000)的语句之前的任何位置添加一个简单的语句,它将起作用。return 0

于 2013-07-25T13:42:54.650 回答