2008-12-03 7 views

Trả lời

7

Bạn cũng có thể sử dụng -[NSObject performSelector:awithObject:afterDelay:]+[NSObject cancelPreviousPerformRequestsWithTarget:selector:object].

+0

+ cancelPreviousPerformRequestsWithTarget: selector: object: là một phương thức lớp (+), không phải là phương thức cá thể (-). Đó là lý do tại sao nó lấy mục tiêu (ví dụ) là một trong các đối số của nó. –

+0

Rất tiếc, bạn đã đúng, cảm ơn vì đã bắt! –

+0

Cái này dễ sử dụng hơn NSTimer. Hay tôi đang thiếu một cái gì đó? –

1

trong tiêu đề của bạn ..

NSTimer *timer; 

khi bạn muốn thiết lập ..

timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(yourMethod:) userInfo:nil repeats:NO]; 

khi bạn muốn hủy bỏ ..

[timer invalidate]; 
+0

Đừng quên giữ lại bộ hẹn giờ khi bạn thiết lập và giải phóng bộ đếm thời gian sau khi bạn vô hiệu hóa bộ hẹn giờ. Dựa vào vòng lặp chạy để giữ lại nó cho bạn là hình thức xấu và nguy cơ vỡ nếu Apple bao giờ thay đổi việc thực hiện. –

3

Sử dụng NSTimer. Sử dụng tính năng này để thiết lập cuộc gọi tới phương thức sau ba giây. Nó sẽ chỉ được gọi một lần:

[NSTimer scheduledTimerWithTimeInterval: 3 
            target: self 
            selector: @selector(method:) 
            userInfo: nil 
            repeats: NO]; 

phương pháp cần nhìn như thế này:

- (void) method: (NSTimer*) theTimer; 

Bạn có thể vượt qua các thông số vào phương pháp sử dụng UserInfo (thiết lập để nil ở trên thí dụ). Nó có thể được truy cập theo phương thức như [theTimer userInfo].

Sử dụng phương thức invalidate trên NSTimer để hủy.

+0

Phương pháp CÓ phải giống như thế này? Và có bất cứ điều gì cần thiết để thực hiện với thể hiện NSTimer không? –

+0

Tôi nghĩ rằng tôi đúng khi nói rằng phương pháp này cần phải trông như thế. Tham số userInfo được sử dụng để truyền dữ liệu bổ sung. Đó là quyền truy cập dưới dạng [theTimer userInfo] trong phương thức của bạn. –