Tôi tự hỏi liệu có ai đó có thể giải thích lý do tại sao gửi lại hàng đợi chính và tạo lặp lại NSTimer
Tôi phải thêm nó vào RUN LOOP vì nó quá cháy? Ngay cả khi sử dụng performselectorOnMainThread
Tôi vẫn phải thêm nó vào một RUN LOOP để làm cho nó cháy.NSTimer yêu cầu tôi thêm nó vào một runloop
Dưới đây là một ví dụ về câu hỏi của tôi:
#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];
}
EDIT: Tôi tin rằng tôi diễn đạt câu hỏi này rất kém. Tôi muốn biết lý do tại sao[[NSRunLoop currentRunLoop] addTimer:_busTimer forMode:NSRunLoopCommonModes];
là cần thiết trong startTimer
nếu tôi gọi someMethodBeginCalled
. Nếu tôi không bao gồm dòng đó, bộ hẹn giờ không kích hoạt.
Nếu tôi gọi startTimer
từ viewDidLoad
ví dụ, tôi có thể xóa đường dây NSRunLoop
và bộ hẹn giờ sẽ kích hoạt sau mỗi 60 giây.
Đây là cách tiếp cận bình thường. Rất hiếm khi thêm bộ hẹn giờ vào một runloop theo cách thủ công. Tuy nhiên, bạn nên giữ bộ đếm thời gian trong một chiếc ngà để bạn có thể vô hiệu hóa nó khi cần thiết. –
Có, nếu không, đối tượng mà cuộc gọi sẽ không bao giờ được deallocated nếu bạn có một bộ đếm thời gian lặp lại. – borrrden
Tôi đã chỉnh sửa câu hỏi, về cơ bản tôi hỏi tại sao tôi không thể sử dụng chỉ dòng của bạn khi tôi khởi tạo nó từ dispatch_async trên hàng đợi chính. Không có đường NSRunLoop, bộ hẹn giờ sẽ không kích hoạt. – chicken