2011-11-14 19 views
10

tôi đang thực hiện cuộc gọi chức năng với scheduleTimerWithTimeInterval. tôi chỉ kiểm tra việc phân tích cú pháp xml đã hoàn thành hay không cho các dịch vụ web cụ thể và bộ đếm thời gian không hợp lệ trong phương thức didEndElement sau khi nhận được phản hồi thành công.được lập lịchTimerWithTimeInterval vs performselector với độ trễ với iOS 5.0

timerForStopWebService = [NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(stopWS) userInfo:nil repeats:NO]; 

bây giờ tôi đang gặp sự cố với iOS 5.0 và hoạt động tốt trong các phiên bản iOS khác. trong iOS 5.0, một chức năng stopWS gọi bất cứ lúc nào ngay cả khi tôi đang vô hiệu hóa nó. cho tôi biết nếu bạn có giải pháp cho điều đó.

và bây giờ tôi đang triển khai trình diễn chậm trễ và đặt các biến boolean trong stopWS để xác định rằng phân tích cú pháp đã hoàn tất hay chưa. tôi chỉ muốn biết rằng có bất kỳ sự khác biệt lớn giữa điều này? và giải pháp này có hiệu quả cho vấn đề của tôi không?

nếu cách khác tồn tại, vui lòng đề xuất cho tôi, cảm ơn.

+1

Tôi không hiểu những gì bạn đang tìm kiếm. Bạn có muốn phương thức được gọi là LUÔN không? Hay bạn muốn có thể vô hiệu hóa nó để nó không được gọi? Điều đó không rõ ràng. – Oliver

+0

tôi chỉ muốn biết sự khác biệt giữa scheduleTimerWithTimeInterval vs performselector với độ trễ theo chiều sâu vì tôi đang gặp sự cố với iOS 5.0. –

+0

Và vấn đề này là gì? Bạn nói về nó trong câu hỏi của bạn nhưng nó không rõ ràng. – Oliver

Trả lời

21

Dưới đây là sự khác biệt của bạn

performSelectorWithObjectAfterDelay

  • như tên cho thấy thực hiện một selector sau một số quy định của giây. ONCE.

  • Việc chăm sóc mà bạn cần thực hiện ở đây là bạn cần hủy mọi yêu cầu thực hiện trước đó trước khi đối tượng chọn bộ chọn đang được thực hiện. Để sử dụng phương thức cancelPerformSelector.

scheduledTimerWithTimeInterval

  • phương pháp này mang đến cho bạn khả năng để gọi một selector sau một thời gian quy định quá nhưng nó cũng có một tham số [lặp đi lặp lại:] cho phép bạn gọi cùng selector nhiều lần

  • Bạn cũng có thể chuyển vào lời gọi để gọi bộ chọn, đặc biệt hữu ích khi bộ chọn của bạn cần nhiều đối số.

  • Bạn cần vô hiệu hóa bộ hẹn giờ khi không còn cần thiết nữa. Điều này sẽ thực hiện thủ thuật

    [myTimer invalidate]; myTimer = nil;

Đây cũng là chủ đề dứt khoát nhất trên NSTimer, vui lòng xem qua. How do I use NSTimer?

0

Bạn có thể sử dụng performSelectorWithObjectAfterDelay và sau đó cancelPerformSelector để hủy bỏ nếu không còn cần thiết nữa. Tôi nghĩ rằng điều này dễ dàng hơn scheduledTimerWithTimeInterval vì bạn không cần lưu trữ tham chiếu đến bộ hẹn giờ. Đối với hầu hết các phần, hai cách tiếp cận này sẽ hoạt động như nhau.

+0

Bạn không cần lưu trữ tham chiếu bộ hẹn giờ. Khi nó được thêm vào vòng lặp, bạn chỉ cần tham chiếu nếu bạn muốn hủy nó ... giống như cancelPerformSelector. Nếu không, bạn có thể thực hiện một bộ hẹn giờ với một lần bắn duy nhất. – David

+0

Sự khác biệt chính là khi bạn muốn hủy bỏ nó, mà người hỏi dường như cần. Trong cancelPerformSelector bạn chỉ cần tham chiếu đến đối tượng mà bạn thường có quyền truy cập vào anyways (có thể nó chỉ là self). Để hủy hẹn giờ, bạn phải lưu bộ hẹn giờ ở đâu đó, có thể là một biến mẫu. – zeroimpl

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