メインキューにディスパッチしてリピートを作成する理由を誰かが説明できるかどうか疑問に思ってNSTimer
います。使用しているときでもperformselectorOnMainThread
、それを起動させるためにRUNLOOPに追加する必要があります。
以下は私の質問の例です:
#define queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
#define mainqueue dispatch_get_main_queue()
- (void)someMethodBeginCalled
{
dispatch_async(queue, ^{
int x = 0;
dispatch_async(mainqueue, ^(void){
if([_delegate respondsToSelector:@selector(complete:)])
[_delegate complete:nil];
});
});
}
- (void)compelete:(id)object
{
[self startTimer];
//[self performSelectorOnMainThread:@selector(startTimer) withObject:nil waitUntilDone:NO];
}
- (void)startTimer
{
NSTimer timer = [NSTimer timerWithTimeInterval:3 target:self selector:@selector(callsomethingelse) userInfo:nil repeats:YES];
//NSDefaultRunLoopMode
[[NSRunLoop currentRunLoop] addTimer:_busTimer forMode:NSRunLoopCommonModes];
}
編集:
私はこの質問の言い回しが非常に貧弱だと思います。と呼んだらなぜ [[NSRunLoop currentRunLoop] addTimer:_busTimer forMode:NSRunLoopCommonModes];
必要なのか知りたいのですが。その行を含めないと、タイマーは起動しません。startTimer
someMethodBeginCalled
たとえば、startTimer
から電話をかけると、回線を削除でき、タイマーは60秒ごとに起動します。viewDidLoad
NSRunLoop