সংক্ষিপ্ত উত্তর: হ্যাঁ, এআরসি প্রেরণ সারিগুলি ধরে রেখেছে এবং প্রকাশ করে।
এবং এখন দীর্ঘ উত্তরের জন্য ...
যদি আপনার স্থাপনার লক্ষ্যটি আইওএস 6.0 বা ম্যাক ওএস এক্স 10.8 এর চেয়ে কম হয়
আপনার ব্যবহার dispatch_retain
এবং dispatch_release
আপনার সারিতে থাকা দরকার। এআরসি এগুলি পরিচালনা করে না।
আপনার স্থাপনার লক্ষ্যটি যদি আইওএস 6.0 বা ম্যাক ওএস এক্স 10.8 বা তার পরে হয়
এআরসি আপনার জন্য আপনার সারিটি পরিচালনা করবে। আপনার প্রয়োজন (এবং না পারে) ব্যবহার করতে হবে না dispatch_retain
বা dispatch_release
এআরসি সক্ষম থাকলে।
বিশদ
আইওএস 6.0 এসডিকে এবং ম্যাক ওএস এক্স 10.8 এসডিকে থেকে শুরু করে প্রতিটি প্রেরণ বস্তু (ক সহ dispatch_queue_t
) এছাড়াও একটি উদ্দেশ্য-সি অবজেক্ট। এটি <os/object.h>
শিরোলেখ ফাইলটিতে নথিযুক্ত:
* By default, libSystem objects such as GCD and XPC objects are declared as
* Objective-C types when building with an Objective-C compiler. This allows
* them to participate in ARC, in RR management by the Blocks runtime and in
* leaks checking by the static analyzer, and enables them to be added to Cocoa
* collections.
*
* NOTE: this requires explicit cancellation of dispatch sources and xpc
* connections whose handler blocks capture the source/connection object,
* resp. ensuring that such captures do not form retain cycles (e.g. by
* declaring the source as __weak).
*
* To opt-out of this default behavior, add -DOS_OBJECT_USE_OBJC=0 to your
* compiler flags.
*
* This mode requires a platform with the modern Objective-C runtime, the
* Objective-C GC compiler option to be disabled, and at least a Mac OS X 10.8
* or iOS 6.0 deployment target.
এর অর্থ হল আপনি আপনার সারিতে একটি সঞ্চয় করতে পারে NSArray
বা NSDictionary
বা এক সঙ্গে একটি সম্পত্তি এ, strong
, weak
, unsafe_unretained
, assign
, অথবা retain
বৈশিষ্ট্যাবলী। এর অর্থ হ'ল আপনি যদি কোনও ব্লক থেকে আপনার সারিটি উল্লেখ করেন তবে ব্লকটি স্বয়ংক্রিয়ভাবে সারিটি ধরে রাখবে।
তাই যদি আপনার স্থাপনার লক্ষ্য অন্তত আইওএস 6.0 বা ম্যাক OS X 10.8 এবং আপনি এআরসি সক্ষম করা , এআরসি ধরে রাখা হবে এবং আপনার কিউ মুক্তি, এবং কম্পাইলার ইচ্ছা ফ্ল্যাগ ব্যবহার কোনো প্রয়াস dispatch_retain
বা dispatch_release
একটি ত্রুটি হিসাবে।
যদি আপনার স্থাপনার টার্গেটটি কমপক্ষে আইওএস 6.0 বা ম্যাক ওএস এক্স 10.8 হয় এবং আপনি আরসি অক্ষম করে থাকেন , আপনাকে অবশ্যই নিজের সারিটি ধরে রাখতে এবং ছেড়ে দিতে হবে, হয় কল করে dispatch_retain
এবং dispatch_release
, বা সারি retain
এবং release
বার্তা (যেমন [queue retain]
এবং [queue release]
) প্রেরণ করে ।
পুরাতন codebases সাথে সামঞ্জস্যের জন্য, আপনি সংজ্ঞায়িত দ্বারা একটি উদ্দেশ্য সি অবজেক্ট হিসেবে আপনার সারিতে দেখে কম্পাইলার প্রতিরোধ করতে পারি OS_OBJECT_USE_OBJC
করতে 0
। উদাহরণস্বরূপ, আপনি এটি আপনার .pch
ফাইলে রাখতে পারেন (কোনও #import
বিবৃতি দেওয়ার আগে ):
#define OS_OBJECT_USE_OBJC 0
অথবা আপনি OS_OBJECT_USE_OBJC=0
আপনার বিল্ড সেটিংসে প্রিপ্রোসেসর ম্যাক্রো হিসাবে যুক্ত করতে পারেন । আপনি যদি সেট OS_OBJECT_USE_OBJC
করে রাখেন 0
, এআরসি আপনার জন্য আপনার সারিটি ধরে রাখতে বা ছাড়বে না এবং আপনাকে এটি ব্যবহার করে dispatch_retain
এবং নিজেই করতে হবে dispatch_release
।