3

私はマルチスレッドに慣れていないので、アドバイスが必要です。

コードでARCを使用しています。

問題:アプリでNSTimerを設定して、このようなスレッドを作成して開始するメソッドを1秒ごとに起動しました

//Create a new thread
mSomeThread = [[NSThread alloc] initWithTarget:self selector:@selector(someMethod) object:nil]; 

//start the thread 
[mSomeThread start]; 

mSomeThreadivarはどこにありますか

mSomeThreadの実行に1秒以上かかり、mSomeThreadが2回割り当てられるとしましょう。つまり、ARCの「ルール」に従って、もう一度割り当てられる前に解放されます。

それは、最初のスレッドが完了せず、かなり強制されることを意味しますか?

4

2 に答える 2

0

NSThread、実行中は自身を保持します。mSomeThreadリセットすると、実行中のスレッドが途中で終了するリスクはありません。

于 2012-06-03T08:24:12.320 に答える
-1

はい。本当に現在の実行スレッドへの参照を保持する必要がある場合someMethodは、実際に新しいスレッドを開始する前に、実行が完了するのを待つ必要があります。これを行う簡単な方法は、追加することです

while ([mSomeThread isExecuting]) {
    sleep(1);
}

直後[mSomeThread start];

ちなみに、NSThreadを再実装し、そのmain実装内に反復的なNSTimerをセットアップしたいと思います。何かのようなもの:

- main {
      @autoreleasepool {
          [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(someMethod) userInfo:nil repeats:NO];
          [[NSRunLoop currentRunLoop] run];
        }
}
于 2012-06-03T08:13:53.407 に答える