0

現在、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 が実行されていないようです。誰かが私にいくつかの提案をしてくれるのだろうか。それはすでに私を夢中にさせました。

よろしくお願いします。

4

2 に答える 2

1

アプリケーションのメイン スレッドが、他のスレッドが何かを処理する機会を得る前に終了しようとしています。

メインメソッドsleep(1000)のステートメントの前に単純なステートメントを追加すると機能します。return 0

于 2013-07-25T13:42:54.650 に答える
1

スレッドが を実行する前に、アプリケーションが終了していますNSLog

NSThread切り離されたスレッドを作成します。 Apple のThread Programming Guideを参照してください。

重要: アプリケーションの終了時に、切り離されたスレッドはすぐに終了できますが、結合可能なスレッドは終了できません。プロセスの終了を許可する前に、結合可能な各スレッドを結合する必要があります。そのため、データをディスクに保存するなど、中断してはならない重要な作業をスレッドが実行している場合は、結合可能なスレッドが適している場合があります。

結合可能なスレッドを作成し、結合可能なすべてのスレッドが終了するまでメインスレッドをブロックできるようにするには、上記のガイドで説明されているpthreadを使用します。

Java スレッド モデルは似ていますが、用語が少し異なります。デフォルトでは、Java スレッドは結合可能であり、Java アプリケーションはそのようなスレッドがすべて終了するまで実行を続けます。Java スレッドはデーモンスレッドに変換できます。デーモンスレッドは、スレッドと同様に、アプリケーションの終了時に自動的に終了しますNSThread

于 2013-07-25T19:26:43.953 に答える