আমি ধাঁধাটি সম্পূর্ণ করার চেষ্টা করছি।
__strongএনএসবজেক্ট, এনএসএসস্ট্রিং ইত্যাদির মতো সমস্ত অবজেক্টিভ-সি রক্ষণযোগ্য অবজেক্ট পয়েন্টারগুলির জন্য এটি ডিফল্ট It's এটি একটি শক্তিশালী রেফারেন্স। এআরসি -releaseসুযোগের শেষে এটির সাথে ভারসাম্য রক্ষা করে ।
__unsafe_unretainedপুরানো পথ সমান। এটি ধরে রাখার যোগ্য অবজেক্টটি ধরে না রেখে দুর্বল পয়েন্টারের জন্য ব্যবহার করা হয়।
__weakএটি __unsafe_unretainedবাদে এটি একটি স্ব-শূণ্য দুর্বল রেফারেন্সের অর্থ এই যে রেফারেন্সযুক্ত বস্তুটি বিলম্বিত হওয়ার সাথে সাথে পয়েন্টারটি নিল হয়ে যাবে। এটি ঝুঁকিপূর্ণ পয়েন্টার এবং EXC_BAD_ACCESS ত্রুটির ঝুঁকি দূর করে।
তবে ঠিক কী জন্য __autoreleasingভাল? আমার এই যোগ্যতাটি কখন ব্যবহার করতে হবে সে সম্পর্কে ব্যবহারিক উদাহরণগুলি খুঁজে পেতে আমার খুব কষ্ট হচ্ছে। আমি বিশ্বাস করি এটি কেবলমাত্র ফাংশন এবং পদ্ধতিগুলির জন্য যা একটি পয়েন্টার-পয়েন্টার যেমন:
- (BOOL)save:(NSError**);
অথবা
NSError *error = nil;
[database save:&error];
যা এআরসি এর অধীনে এইভাবে ঘোষণা করতে হবে:
- (BOOL)save:(NSError* __autoreleasing *);
তবে এটি খুব অস্পষ্ট এবং আমি কেন তা পুরোপুরি বুঝতে চাই । আমি যে কোড স্নিপেটগুলি পেয়েছি তা দুটি তারার মাঝে __আউটোরেলিজিং অন্তর্ভুক্ত রাখে, যা আমার কাছে অদ্ভুত দেখাচ্ছে। প্রকারটি NSError**(এনএসইররারের পয়েন্টার-পয়েন্টার), তাই __autoreleasingতারার মধ্যে কেন কেবল সামনে নয় কেন NSError**?
এছাড়াও, এমন অন্যান্য পরিস্থিতিও থাকতে পারে যার মধ্যে আমাকে নির্ভর করতে হবে __autoreleasing।