2012-05-26 43 views
32

Tôi cần gọi phương thức khi ứng dụng của tôi bắt đầu và sau đó gọi cùng một phương thức cứ sau 5 giây.Làm thế nào để kích hoạt NSTimer ngay lập tức?

Mã của tôi là khá đơn giản:

// Call the method right away 
[self updatestuff:nil] 

// Set up a timer so the method is called every 5 seconds 
timer = [NSTimer scheduledTimerWithTimeInterval: 5 
              target: self 
             selector: @selector(updatestuff:)  
             userInfo: nil 
             repeats: YES]; 

Có một lựa chọn cho bộ đếm thời gian do đó, nó kích hoạt ngay lập tức và sau đó mỗi 5 giây?

Trả lời

65

NSTimer 's -fire, [timer fire]; là những gì bạn đang tìm kiếm.

Điều đó sẽ kích hoạt/ngay lập tức gọi bộ hẹn giờ loại bỏ thời gian trễ.

13

Bạn không thể lên lịch hẹn giờ và kích hoạt sự kiện ngay lập tức tất cả trong cùng một dòng mã. Vì vậy, bạn phải làm điều đó trong 2 dòng mã.

Thứ nhất, lên lịch hẹn giờ, sau đó ngay lập tức gọi 'lửa' trên timer của bạn:

timer = [NSTimer scheduledTimerWithTimeInterval: 5 
             target: self 
            selector: @selector(updatestuff:)  
            userInfo: nil 
            repeats: YES]; 
[timer fire]; 

Khi lửa được gọi, khoảng thời gian mà hẹn giờ của bạn chờ đợi để bắn sẽ thiết lập lại bởi vì nó chỉ chạy, và sau đó sẽ tiếp tục chạy sau đó tại khoảng thời gian được chỉ định - trong trường hợp này, cứ 5 giây một lần.

3

Bạn có thể khởi tạo bộ đếm thời gian và bắn nó trong cùng một dòng:

[(checkStatusTimer = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(checkStatusTimerTick:) userInfo:nil repeats:YES]) fire]; 
+1

cú pháp Very nice! – loretoparisi

Các vấn đề liên quan