0

NSThreadに問題がありますが、よくわかりません。

NSThreadを適切に作成する方法:

- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument

それから...

私はNSThreadと彼のすべてのメソッドと少し混乱しています。

NSThreadを作成し、5分ごとに起動したいと思います(もちろん、アプリケーションを遅滞なく使用し続けます:)

4

4 に答える 4

1

スレッドを開始するメソッドを実行する NSTimer を設定できます

  // Put in a method somewhere that i will get called and set up.
 [NSTimer timerWithTimeInterval:10 target:self selector:@selector(myThreadMethod) userInfo:nil repeats:YES];

また

  [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(myThreadMethod) userInfo:nil repeats:YES];

これを NSTimer に設定して、タイマーのプロパティを設定することもできます。開始と終了など。

 - (void)myThreadMethod
 {
      [NSThread detachNewThreadSelector:@selector(someMethod) toTarget:self withObject:nil];
  }
于 2012-12-07T10:14:00.163 に答える
1

または、Apple が使用からの移行を推奨しているため、GCD でディスパッチ ソースをNSThread使用します。

次の ivar が存在すると仮定します。

dispatch_source_t _timer;

たとえば、次のようになります。

dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, backgroundQueue);
dispatch_source_set_timer(_timer, DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC, 0.05 * NSEC_PER_SEC);
dispatch_source_set_event_handler(_timer, ^{
    NSLog(@"periodic task");
});
dispatch_resume(_timer);

これにより、2 秒ごとに小さな余裕を持ってバックグラウンド キューで小さなタスクが起動されます。

于 2012-12-07T10:32:17.030 に答える
0

NSTimer を使用して実装することができます。メインスレッドに NSTimer を登録します。

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:300 target:self selector:@selector(doSomething) userInfo:nil repeats:YES];

-doSomething を使用してスレッドを開始し、実際の作業を行うことができます。

-(void) doSomething {
    dispatch_queue_t doThings = dispatch_queue_create("doThings", NULL);
    dispatch_async(doThings, ^{

       //Do heavy work here...

       dispatch_async(dispatch_get_main_queue(), ^{
           //Here is main thread. You may want to do UI affair or invalidate the timer here.
       });
   });
}

詳細については、 NSTimer クラスGCDを参照してください。

于 2012-12-07T10:18:39.780 に答える
0

あなたの目的のためにNSTimer + NSThredをお勧めします

[NSTimer scheduledTimerWithTimeInterval:300 target:self selector:@selector(triggerTimer:) 
userInfo:nil repeats:YES];

-(void) triggerTimer:(NSTimer *)theTimer 
{
    //Here perform the thread operations
   [NSThread detachNewThreadSelector:@selector(myThreadMethod) toTarget:self withObject:nil];
}
于 2012-12-07T10:14:04.747 に答える