2009-10-28 33 views
5

Tôi muốn lên lịch một chuỗi sau khi hoàn thành chuỗi.Lập lịch một Chủ đề sau một Chủ đề trong ứng dụng iphone

Có thể không? Làm sao?

Ví dụ (để xác định nhu cầu của tôi)

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    // 1. response - schedule myThread 
    // 2. response - schedule a new thread which will be executed after myThread 
    // 3. response - schedule a new thread which will be executed after second thread 
    // ..... 
} 
+2

Tôi hỏi tại sao tất cả những điều này cần phải là các luồng riêng biệt, nếu chúng thực hiện một tập hợp các nhiệm vụ nối tiếp đúng? –

+0

Bạn có điền ví dụ đại diện cho trường hợp này, tôi cần nó ngay bây giờ – wod

Trả lời

10

Nếu bạn sử dụng NSOperations bạn có thể sử dụng phương pháp addDependency: để xác định sự phụ thuộc của một hoạt động.

NSInvocationOperation có thể sẽ hữu ích cho bạn nếu bạn đi tuyến đường này.

Chỉnh sửa: Tôi vừa đọc lại chủ đề và bạn đang ở trên iPhone để bạn không có khối, nhưng để tham khảo, nếu bạn có các khối có sẵn, NSBlockOperation thậm chí còn tốt hơn. Lưu ý rằng khi sử dụng các phương pháp này để thực hiện các hoạt động không đồng bộ (và giả sử mã trong chúng sử dụng tự động trả lại), bạn sẽ chịu trách nhiệm khởi tạo NSAutoreleasePool khi phương thức của bạn bắt đầu chạy và giải phóng/thoát nó khi thoát.

+1

Blocks và do đó NSBlockOperation không khả dụng trên iPhone (chưa). (Ngoài ra, các liên kết của bạn trỏ tới tài liệu Mac OS X, vì đây là một câu hỏi của iPhone, tài liệu hệ điều hành iPhone sẽ phù hợp hơn.) – oefe

+0

Đã chỉnh sửa để cập nhật liên kết – nall

+0

** Cập nhật: ** Theo iOS 4.0, chúng tôi hiện có các khối . – memmons

2

(1) Bạn có thể thăm dò ý kiến ​​các chủ đề isFinished tài sản.

(2) Bạn có thể đăng ký đối tượng điều phối/điều khiển của mình để nhận chủ đề NSThreadWillExitNotification thông báo. Để kiểm soát chính xác hơn, bạn có thể phân lớp NSThread và gửi thông báo là hành động cuối cùng trước khi luồng dừng. Sau đó, trong trình xử lý thông báo đối tượng điều khiển của bạn, bạn có thể thăm dò ý kiến ​​isFinished để đảm bảo nó được thực hiện trước khi khởi chạy chuỗi tiếp theo.

Xem Thread Programming GuideNSThread Class Guide.

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