Tôi muốn có thể thực hiện một số block
trên vòng lặp chạy lặp tiếp theo. Nó không quá quan trọng cho dù nó được thực hiện ở đầu hoặc cuối của vòng lặp chạy tiếp theo, chỉ việc thực hiện đó được hoãn lại cho đến khi tất cả mã trong vòng lặp chạy hiện tại đã hoàn thành việc thực thi.Làm thế nào để bạn lên lịch cho một khối chạy trên vòng lặp chạy lặp tiếp theo?
Tôi biết những điều sau đây không hoạt động vì nó được xen kẽ với vòng lặp chạy chính để mã của tôi có thể thực thi trên vòng lặp chạy tiếp theo nhưng có thể không.
dispatch_async(dispatch_get_main_queue(),^{
//my code
});
Sau đây tôi tin rằng bị vấn đề tương tự như trên:
dispatch_after(DISPATCH_TIME_NOW, dispatch_get_main_queue(), ^(void){
//my code
});
Bây giờ tôi tin sau đây sẽ làm việc như nó được đặt ở phần cuối của vòng lặp chạy hiện tại (chính xác cho tôi nếu Tôi sai), điều này thực sự có hiệu quả không?
[self performSelector:@selector(myMethod) withObject:nil afterDelay:0];
Điều gì về bộ hẹn giờ với khoảng thời gian 0
? Các tài liệu tuyên bố: If seconds is less than or equal to 0.0, this method chooses the nonnegative value of 0.1 milliseconds instead.
Điều này có dịch để đảm bảo thực thi trên vòng lặp chạy lặp tiếp theo không?
[NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(myMethod) userInfo:nil repeats:NO];
Đó là tất cả các tùy chọn tôi có thể nghĩ nhưng tôi vẫn chưa thực hiện một khối (thay vì gọi phương thức) trên vòng lặp chạy tiếp theo với đảm bảo rằng sẽ không có bất kỳ sớm hơn.
Cảm ơn bạn đã thêm chi tiết CFRunLoop. – lal
Đây là một bản tóm tắt tuyệt vời về vòng lặp chạy. Đối với câu hỏi của OP, tôi muốn nói rằng 'CFRunLoopPerformBlock()' sẽ là cách kosher nhất để đảm bảo rằng khối thực hiện trên vòng lặp tiếp theo của vòng lặp chạy. Các tài liệu không tuyên bố rõ ràng rằng khối sẽ không được thực hiện nếu nó được thêm vào giữa một vòng lặp, nhưng họ nói: "Phương thức này chỉ enqueues khối và không tự động thức dậy vòng lặp chạy quy định. việc thực thi khối này xảy ra vào lần tới khi vòng lặp chạy thức dậy để xử lý một nguồn đầu vào khác. " Bạn có thể kiểm tra bằng cách thêm khối trong lời gọi người quan sát. –