আইফোন আইওএস পৃথক থ্রেডে চলছে


96

আলাদা থ্রেডে কোড চালানোর সর্বোত্তম উপায় কী? তাই কি:

[NSThread detachNewThreadSelector: @selector(doStuff) toTarget:self withObject:NULL];

বা:

    NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
                                                                        selector:@selector(doStuff:)
                                                                          object:nil;
[queue addOperation:operation];
[operation release];
[queue release];

আমি দ্বিতীয় উপায়ে করছি কিন্তু ওয়েসলি কুকবুকটি আমি প্রথম ব্যবহার করছি।

উত্তর:


244

আমার মতে, সবচেয়ে ভাল উপায় হল লিবিডিসপ্যাচ, ওরফে গ্র্যান্ড সেন্ট্রাল ডিসপ্যাচ (জিসিডি)। এটি আপনাকে আইওএস 4 এবং এর চেয়েও বেশি সীমাবদ্ধ করে, তবে এটি কেবল এত সহজ এবং ব্যবহার করা সহজ। ব্যাকগ্রাউন্ড থ্রেডে কিছু প্রক্রিয়াজাতকরণের কোড এবং তারপরে মূল রান লুপের ফলাফলগুলি সহ কিছু করার জন্য অবিশ্বাস্যরকম সহজ এবং কমপ্যাক্ট:

dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // Add code here to do background processing
    //
    //
    dispatch_async( dispatch_get_main_queue(), ^{
        // Add code here to update the UI/send notifications based on the
        // results of the background processing
    });
});

আপনি যদি ইতিমধ্যে এটি না করে থাকেন তবে ডাব্লুডাব্লুডিসি 2010 থেকে লিবিডিসপ্যাচ / জিসিডি / ব্লকগুলিতে ভিডিওগুলি দেখুন।


আমার এটি 3.0 সামঞ্জস্যপূর্ণ হওয়া দরকার :(
মাইক এস

4
তারপরে অপারেশন সারিগুলি সম্ভবত পরবর্তী সেরা সমাধান। এছাড়াও, নিশ্চিত হয়ে নিন যে আপনি খুব তাড়াতাড়ি সম্মতিতে ডুব দিচ্ছেন না। আপনার মাল্টিথ্রেড হওয়া দরকার কিনা তা দেখার জন্য বা আপনার নিজের সিঙ্গল-থ্রেডযুক্ত কোডটি আরও কার্যকর করার জন্য ডিজাইন করতে পারেন কিনা তা দেখার জন্য একক থ্রেডযুক্ত এবং প্রোফাইলের মাধ্যমে লেখার চেষ্টা করুন। সাধারণ কাজের জন্য, আপনি মাঝে মাঝে পারফরম্যাসলেক্টর: উইট অবজেক্ট: আফ্রিকাডেলি: এবং মাল্টি-থ্রেড প্রোগ্রামিংয়ের সাথে আসা সমস্ত বিষয় এড়াতে পারেন with
জ্যাক

এটিকে পরে পুনরুত্থিত করার জন্য দুঃখিত, তবে আমি যদি পারফরমেসেলেটারের সাথে একটি পদ্ধতি কলটি উত্পন্ন করি: উইড অবজেক্ট: আফ্রিকাডিয়েডের পরে কি আমার এখনও অ্যাসিঙ্ক পদ্ধতির ভিতরে একটি এনএসআউটোরেলপুল ব্যবহার করা দরকার? যদি এটি যাদুতে প্রধান অটো রিলিজ পুল ব্যবহার করে তবে সঞ্চালনকারী নির্বাচন করুন: পরে ডেলা অবশ্যই একটি দ্রুত বিকল্প।
মাইক এস

না, কারণ পদ্ধতিটি মূল থ্রেডে চলছে, যার নিজস্ব অটোরিলেজ পুল রয়েছে।
জ্যাকস 23

4
@ জো আপনি ইতিমধ্যে জানেন এমন কিছু বলার ঝুঁকিতে আপনার থ্রেড মেরে কোড লেখার অভ্যাসে পড়া উচিত নয়, এটি আপনাকে বা আপনার ক্যারিয়ারকে দীর্ঘকালীন সাহায্য করবে না। থ্রেড না মারার কারণেই এই পোস্টটি দেখুন (বা অনেকেই এটি পছন্দ করেছেন)।
মাইকিসি

1

আইওএসে মাল্টিথ্রেডিংয়ের সর্বোত্তম উপায় হ'ল জিসিডি (গ্র্যান্ড সেন্ট্রাল ডিসপ্যাচ)।

//creates a queue.

dispatch_queue_t myQueue = dispatch_queue_create("unique_queue_name", NULL);

dispatch_async(myQueue, ^{
    //stuffs to do in background thread
    dispatch_async(dispatch_get_main_queue(), ^{
    //stuffs to do in foreground thread, mostly UI updates
    });
});

0

লোকেরা যে কৌশলগুলি পোস্ট করেছে সেগুলি আমি চেষ্টা করব এবং দেখি কোনটি দ্রুততম, তবে আমি মনে করি এটি এটি করার সেরা উপায়।

[self performSelectorInBackground:@selector(BackgroundMethod) withObject:nil];

এটি কম অগ্রাধিকারে থ্রেড চালু করে। থ্রেডিংয়ের জন্য জিসিডি ব্যবহার করা সবচেয়ে ভাল উপায়।
কার্স্টেন

0

আমি এনএসটিহ্রেডে একটি বিভাগ যুক্ত করেছি যা আপনাকে ব্লকগুলিতে সহজেই থ্রেডগুলি কার্যকর করতে দেয়। আপনি কোডটি এখানে থেকে অনুলিপি করতে পারেন।

https://medium.com/@umairhassanbaig/ios-how-to-perform-a-background-thread-and-main-thread-with-ease-11f5138ba380

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.