Tôi dường như có một số nhầm lẫn giữa các hàng đợi dispatch_queue_t
và NSOperationQueue
.Nhận dispatch_queue_t cơ bản từ NSOperationQueue
Theo mặc định, AFImageRequestOperation
của AFNetworking sẽ thực thi khối gọi lại thành công trên chuỗi chính của ứng dụng. Để thay đổi điều này, AFHTTPRequestOperation
có thuộc tính successCallbackQueue
cho phép bạn chọn hàng đợi để chạy cuộc gọi lại.
Tôi đang cố gắng thực hiện cuộc gọi lại thành công trên cùng một chuỗi nền/chủ đề nền đã thực hiện yêu cầu HTTP. Thay vì trở về chủ đề chính, NSOperationQueue
chạy yêu cầu HTTP cũng sẽ chạy cuộc gọi lại vì có một số phép tính nặng mà tôi cần thực hiện bằng cách sử dụng một số hình ảnh đã trả về.
Lần thử đầu tiên của tôi là đặt successCallbackQueue
thành ví dụ NSOperationQueue
mà trên đó AFImageRequestOperation
chạy. Tuy nhiên, thuộc tính successCallbackQueue
thuộc loại dispatch_queue_t
, vì vậy tôi cần một cách để có được cơ bản dispatch_queue_t
trong số NSOperation
ví dụ của mình, nếu có một thứ như vậy.
Điều đó có thể xảy ra hay tôi cần tạo riêng dispatch_queue_t
?
Lý do tôi hỏi: Hơi lạ khi AFNetworking kế thừa từ NSOperation
, nhưng hy vọng chúng tôi sử dụng hàng đợi dispatch_queue_t
cho các cuộc gọi lại. Loại trộn hai mô hình dispatch_queue_t
và NSOperationQueue
.
Cảm ơn mọi gợi ý!
Khá chắc chắn điều này không đúng trong năm 2013, nhưng chắc chắn Yosemite NSOperationQueue có thuộc tính 'innerQueue' hiển thị 1: 1 tương ứng. –
không, không hoàn toàn, thuộc tính đó chỉ là không-nil nếu bạn có 'setUnderlyingQueue:' trước đó ... nếu không có một hàng đợi công văn mới được thực hiện theo yêu cầu cho mỗi lần thực thi NSOperation. Trong bất kỳ trường hợp nào, các hàng đợi gửi đi vẫn chỉ được sử dụng để thực hiện, hàng đợi của NSOperationQueue vẫn hoàn toàn tách biệt và chỉ khi NSOperationQueue xác định một hoạt động sẽ được chạy, nó sẽ được thêm vào hàng đợi công văn để thực thi. – das
Tôi không thấy cách này trả lời câu hỏi. Câu hỏi đặt ra là, làm thế nào để bạn có được AFNetworking gọi lại cho bạn trên cùng một chuỗi nơi bạn gọi nó. Câu trả lời bạn có thể không? Hoặc bạn phải tạo một hàng đợi công văn riêng biệt? –