এআরসি -fno-objc-arc ফাইলটি চিহ্নিত করার পরেও স্ট্রাক্ট বা ইউনিয়নে অবজেক্টিভ-সি অবজেক্টগুলিকে নিষেধ করে? কেন এমন হয়?
আমার ধারণা ছিল যে আপনি যদি এটি -fno-objc-arc চিহ্নিত করেন তবে আপনার এই বাধা নেই।
উত্তর:
আপনি যদি এই বার্তাটি পান তবে __unsafe_unretained চেষ্টা করুন। এটি কেবল নিরাপদ, যদি স্ট্রাক্টের অবজেক্টগুলি অপরিবর্তিত থাকে। উদাহরণ: আপনি যদি আরসি দিয়ে ওপেনফিন্ট ব্যবহার করেন ক্লাস অফব্রেগডেলিগেটস্ট্রিংস স্ট্রাক্টে এই ত্রুটিটি বলে।
typedef struct OFBragDelegateStrings
{
NSString* prepopulatedText;
NSString* originalMessage;
} OFBragDelegateStrings;
প্রতি
typedef struct OFBragDelegateStrings
{
__unsafe_unretained NSString* prepopulatedText;
__unsafe_unretained NSString* originalMessage;
} OFBragDelegateStrings;
NSArray
)? সেক্ষেত্রে এটি অবিলম্বে বিলোপযুক্ত হবে না, তবে আমি অবাক হয়েছি যে
বরং একটি ব্যবহার তুলনায় struct হয় , আপনি একটি তৈরি করতে পারেন উদ্দেশ্য সি বর্গ পরিবর্তে ডেটা পরিচালনা করতে।
এটি কারণ কারণ চাপটি স্ট্রাক্ট বা ইউনিয়নে অবজেক্টগুলি ট্র্যাক করতে পারে না (যেহেতু তারা প্লেইন সি পয়েন্টারে থাকে)।
যদিও আপনি প্রশ্নযুক্ত ফাইল / শ্রেণি চিহ্নিত করেছেন -fno-objc-arc
তবুও এটি চাপ দ্বারা নিয়ন্ত্রিত কোনও বস্তুকে প্যারামিটার হিসাবে দিতে পারে, যার ফলে সম্ভবত মেমরি ফাঁস হতে পারে।
-fno-objc-arc
কোনও প্রকল্পের মধ্যে এআরসি এবং নন এআরসি ফাইলগুলি মিশ্রিত করতে ব্যবহার করতে পারেন তবে আপনি যদি স্ট্রাক্ট বা ইউনিয়নের মতো প্লেইন সি কাঠামোগুলি ব্যবহার করেন তবে আপনি আরকি ব্যবহার করতে পারবেন না।
দেখে মনে হচ্ছে এটি এখন ত্রুটি ছাড়াই কাজ করে, সম্ভবত এই পরিবর্তনের পরে ।
যেমন, আপনি সি স্ট্রাক্টে অবজেক্টিভ-সি অবজেক্টগুলিতে সাধারণ (শক্তিশালী) পয়েন্টার রাখতে পারেন। এটি এআরসি দ্বারা পরিচালিত হয় যেমন, স্ট্রাক্টটি নষ্ট হয়ে গেলে এটি অপরিবর্তিত হয়। এর সাথে যাচাইকৃত:
$ clang --version
Apple LLVM version 10.0.0 (clang-1000.11.45.2)