NSThreadに問題がありますが、よくわかりません。
NSThreadを適切に作成する方法:
- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument
それから...
私はNSThreadと彼のすべてのメソッドと少し混乱しています。
NSThreadを作成し、5分ごとに起動したいと思います(もちろん、アプリケーションを遅滞なく使用し続けます:)
NSThreadに問題がありますが、よくわかりません。
NSThreadを適切に作成する方法:
- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument
それから...
私はNSThreadと彼のすべてのメソッドと少し混乱しています。
NSThreadを作成し、5分ごとに起動したいと思います(もちろん、アプリケーションを遅滞なく使用し続けます:)
スレッドを開始するメソッドを実行する 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];
}
または、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 秒ごとに小さな余裕を持ってバックグラウンド キューで小さなタスクが起動されます。
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を参照してください。
あなたの目的のために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];
}