يمكن تنفيذ completionBlock من ASIHTTPRequest/AFNetworking على خلفية الموضوع ؟

StackOverflow https://stackoverflow.com/questions/9465834

سؤال

بدء ASIHTTPrequest بشكل متزامن في موضوع مستقل مثل هذا :

//inside this start method I create my ASIHTTPRequest and start it
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    [process start];
});

ولكن completionBlock هو ما يزال يطلق على الخيط الرئيسي. يمكن الحفاظ على تنفيذ completionBlock في نفس الموضوع حيث طلب بدأت ؟

الشيء الوحيد الذي أنا يمكن أن تصل إلى حل هذا هو تعريف ارسال قائمة الانتظار يدويا تنفيذ completionBlock في نفس الموضوع ، وبالتالي عقد إشارة إلى خلق طابور.ولكن هذا لا يحل مباشرة لأنك لن تمر ينقط لحظة صغيرة في الموضوع الرئيسي قبل إعادة توجيه بقية التعليمات البرمجية التي تم إنشاؤها ارسال قائمة الانتظار.

هل لدى أحدكم حل أفضل ؟

تحرير:ونفس الشيء ينطبق أيضا على AFNetworking الانتهاء كتل...

هل كانت مفيدة؟

المحلول

حسنا الإجابة على سؤالي :ASIHTTPRequest الإطار لا خيار لبدء الانتهاء الكتل في موضوع مختلف.

بدلا من ذلك يمكن للمرء استخدام AFNetwork الإطار.هنا لديك اثنين من الخصائص على أي نوع من AFOperation يسمى 'successCallbackQueue'و 'failureCallbackQueue'.حيث يمكنك إضافة مسبقا 'dispatch_queue_t إلى التعامل مع تنفيذ النجاح والفشل كتل.

نأمل أن يكون هذا سوف يساعد الآخرين مع نفس المشكلة!

تحديث :على سبيل المثال

 dispatch_queue_t requestQueue = dispatch_queue_create("requestQueue", NULL);
 AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:yourRequest];
 operation.successCallbackQueue = requestQueue;
 operation.failureCallbackQueue = requestQueue;
 [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    // add code for completion
 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // add code for failure
 }];
 [operation start];

نصائح أخرى

حاول استخدام قائمة انتظار محددة من خلقك الخاص.ثم يمكنك (بمجرد انتهاء أخيرا، في كتلة الإنجاز الخاصة بها) مرة أخرى إلى قائمة الانتظار العالمية لتحديث أي عرض ضروري.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top