2010-09-08 41 views
6

Tôi có NSOperationQueue với một số NSOperations trong đó (NSInvocationOperations, cụ thể). Hoạt động này thực hiện một số phép tính và thay đổi trạng thái của các phần tử giao diện người dùng tương ứng (tất nhiên, thông qua performSelectorOnMainThread:...), thường sử dụng hình động.Tạm dừng NSOperation

Giao diện người dùng của tôi có UINavigationViewController và một số nút để điều hướng đến một chế độ xem khác. Vì vậy, người dùng có thể rời khỏi chế độ xem hiện tại, trong khi tính toán/hoạt ảnh vẫn đang được tiến hành. Và những gì tôi cần là để ngăn chặn điều này bằng cách nào đó cho đến khi người dùng quay trở lại chế độ xem hiện tại.

Giải pháp duy nhất tôi tìm thấy là tạo một số cờ boolean an toàn chủ đề - và để kiểm tra nó trong tất cả các chuỗi (giống như: while! Flag sleep_for_some_time;). Có cái gì tốt hơn?

Trả lời

12

Câu hỏi này hơi mơ hồ, vì vậy thật khó để nói mà không biết tất cả mã đang phát. Với điều đó đã nói, tôi có thể tiếp cận vấn đề bằng cách:

Tùy chọn 1. Trong lớp con của NSOperation, thêm thuộc tính KVO nguyên tử của riêng bạn "isPaused". Trong bản thân hoạt động, hãy quan sát thuộc tính đó và xử lý phù hợp nếu nó thay đổi.

Tùy chọn 2. Bạn có bao giờ đình chỉ hàng đợi vận hành không? Nếu vậy, hãy xem xét việc quan sát thuộc tính đó từ bên trong các hoạt động của bạn và mỗi thuộc tính độc lập có thể thực hiện hành động nếu giá trị đó thay đổi.

Tùy chọn 3. Hủy tất cả các thao tác trong hàng đợi và nếu chế độ xem xuất hiện lại, chỉ cần khởi động lại với các thao tác mới.

Nhìn chung, mặc dù, không có viên đạn ma thuật nào cho các hoạt động tạm dừng đang được tiến hành. Bạn sẽ phải nướng giải pháp của riêng bạn. Tuy nhiên, thiệt hại không quá tệ.