কোনও খারাপ দিক নেই। এটা ব্যবহার করো. আজই কর। এটি আপনার পুরানো কোডের চেয়ে দ্রুত। এটি আপনার পুরানো কোডের চেয়ে নিরাপদ। এটি আপনার পুরানো কোডের চেয়ে সহজ। এটি আবর্জনা সংগ্রহ নয়। এটির কোনও জিসি রানটাইম ওভারহেড নেই। সংকলক সন্নিবেশগুলি যেভাবে আপনার থাকা উচিত সমস্ত স্থানে ধরে রাখে এবং প্রকাশ করে। তবে এটি আপনার চেয়ে বেশি স্মার্ট এবং বাস্তবে প্রয়োজনীয় নয় এমনগুলি খুঁজে বের করতে পারে (ঠিক যেমন এটি লুপগুলি তালিকাভুক্ত করতে পারে, অস্থায়ী পরিবর্তনগুলি, ইনলাইন ফাংশন ইত্যাদি নির্মূল করতে পারে))
ঠিক আছে, এখন আমি আপনাকে ছোট ডাউনসাইড সম্পর্কে বলব:
আপনি যদি দীর্ঘ সময়ের ওবিজেসি বিকাশকারী হন, আপনি যখন এআরসি কোডটি দেখেন তখন আপনি প্রায় এক সপ্তাহের জন্য মুচড়ে যাবেন। আপনি খুব দ্রুত এটি অতিক্রম করতে হবে।
কোর ফাউন্ডেশন কোড ব্রিজ করতে কিছু (খুব) ছোট জটিলতা রয়েছে। যে কোনও id
হিসাবে আচরণ করে এমন কিছু নিয়ে কিছুটা জটিলতা রয়েছে void*
। সি-অ্যারের মতো বিষয়গুলি id
সঠিকভাবে করতে আরও কিছুটা ভাবতে পারে। ওবিজির অভিনব হ্যান্ডলিংও va_args
সমস্যা তৈরি করতে পারে। একটি ObjC পয়েন্টারে গণিত জড়িত বেশিরভাগ জিনিস জটিল trick আপনার কোনও অবস্থাতেই এর বেশি হওয়া উচিত নয়।
আপনি একটি id
এ স্থাপন করতে পারবেন না struct
। এটি মোটামুটি বিরল, তবে কখনও কখনও এটি ডেটা প্যাক করার জন্য ব্যবহৃত হয়।
আপনি যদি কেভিসি নামকরণ সঠিকভাবে অনুসরণ না করে থাকেন এবং আপনি এআরসি এবং নন-এআরসি কোডটি অন্তর্নিয়োগ করেন তবে আপনার মেমরির সমস্যা হবে। এআরসি মেমরি পরিচালনা সম্পর্কিত সিদ্ধান্ত নিতে কেভিসি নামকরণ ব্যবহার করে। যদি এটি সমস্ত এআরসি কোড হয় তবে তাতে কিছু আসে যায় না কারণ এটি এটি উভয় পক্ষের একই "ভুল" করবে। তবে এটি যদি ARC / নন-এআরসি মিশ্রিত থাকে তবে একটি মিল নেই।
ওজেসি ব্যতিক্রম ছোঁড়ার সময় এআরসি মেমরি ফাঁস করবে। আপনার প্রোগ্রামটি শেষ হওয়ার সাথে সাথে একটি ওবিজেসি ব্যতিক্রম খুব কাছাকাছি হওয়া উচিত। আপনি যদি উল্লেখযোগ্য সংখ্যক ওবিজিসি ব্যতিক্রম ধরা থাকেন তবে আপনি সেগুলি ভুলভাবে ব্যবহার করছেন। এটি ব্যবহার করে স্থিরযোগ্য -fobjc-arc-exceptions
তবে এটি নীচে আলোচিত জরিমানা সহ:
আরজে ওবিজেসি বা সি ++ ব্যতিক্রমের সময় ওবিজেসি ++ কোডে মেমরি ফাঁস করবে না, তবে এটি সময় এবং স্থান উভয়ের পারফরম্যান্সের জন্যই ব্যয় করে। এটি ObjC ++ এর আপনার ব্যবহারকে হ্রাস করার কারণগুলির দীর্ঘ তালিকায় আরও একটি।
এআরসি আইফোনএস 3 বা ম্যাক ওএস এক্স 10.5 বা তার আগের কোনওটিতে কাজ করবে না। (এটি আমাকে অনেক প্রকল্পে আরসি ব্যবহার করা থেকে বিরত রাখে))
__weak
পয়েন্টারগুলি আইওএস 4 বা ম্যাক ওএস এক্স 10.6 এ সঠিকভাবে কাজ করে না যা লজ্জাজনক, তবে প্রায় কাজ করা মোটামুটি সহজ। __weak
পয়েন্টার দুর্দান্ত, তবে এআরসি এর # 1 বিক্রয় পয়েন্ট নয়।
কোডের 95% + এর জন্য, আরসি উজ্জ্বল এবং এটি এড়ানোর কোনও কারণ নেই (আপনি ওএস সংস্করণের সীমাবদ্ধতাগুলি পরিচালনা করতে পারেন তবে)। নন-আরসি কোডের জন্য, আপনি -fno-objc-arc
ফাইল-বাই-ফাইলের ভিত্তিতে পাস করতে পারেন । দুর্ভাগ্যক্রমে এক্সকোড অনুশীলনে করা উচিত এর থেকে এটি আরও শক্ত করে তোলে। এটিকে সহজ করার জন্য আপনার সম্ভবত নন-এআরসি কোডটি একটি পৃথক এক্সকোডেপ্রোজে স্থানান্তরিত করা উচিত।
উপসংহারে, যত তাড়াতাড়ি সম্ভব এআরসি তে স্যুইচ করুন এবং কখনই পিছনে ফিরে তাকাবেন না।
সম্পাদনা
আমি "এআরসি ব্যবহার করা কোকো মেমোরি ম্যানেজমেন্টের নিয়মগুলি জানার কোনও বিকল্প নয়" এই ধারায় বেশ কয়েকটি মন্তব্য দেখেছি। এটি বেশিরভাগ ক্ষেত্রেই সত্য, তবে কেন এবং কেন নয় তা বোঝা গুরুত্বপূর্ণ। প্রথমত, যদি আপনার সমস্ত কোডটি এআরসি ব্যবহার করে এবং আপনি তিনটি যাদু শব্দের লঙ্ঘন করেনপুরো জায়গা জুড়ে, আপনার এখনও কোনও সমস্যা নেই। অবাক করে বলা, কিন্তু আপনি সেখানে যান। এআরসি কিছু জিনিস ধরে রাখতে পারে যা আপনি ধরে রাখতে চাইছেন না তবে এটি সেগুলিও ছেড়ে দেবে, তাই এটি কোনও বিষয় নয়। যদি আমি আজ কোকোয় একটি নতুন ক্লাস শিখিয়েছি, আমি সম্ভবত প্রকৃত মেমরি পরিচালনার নিয়মে পাঁচ মিনিটের বেশি সময় ব্যয় করিনি এবং কেভিসি নামকরণের বিষয়ে আলোচনা করার সময় আমি সম্ভবত মেমরি পরিচালনার নামকরণের নিয়মগুলি উল্লেখ করেছি mention এআরসি দিয়ে, আমি বিশ্বাস করি আপনি মেমরি পরিচালনার নিয়মগুলি একেবারেই না শিখেই আসলেই একটি শালীন প্রারম্ভিক প্রোগ্রামার হয়ে উঠতে পারেন।
তবে আপনি কোনও শালীন ইন্টারমিডিয়েট প্রোগ্রামার হতে পারেন নি। কোর ফাউন্ডেশনের সাথে সঠিকভাবে ব্রিজ করার জন্য আপনাকে নিয়মগুলি জানতে হবে এবং প্রতিটি মধ্যবর্তী প্রোগ্রামারকে কিছুটা সময় সিএফ এর সাথে ডিল করতে হবে। এবং আপনার মিশ্র-এআরসি / এমআরসি কোডের নিয়মগুলি জানতে হবে। আপনি যখন void*
নির্দেশকগুলিতে id
(যা আপনার কেভিও সঠিকভাবে সঞ্চালনের প্রয়োজন অবিরত রেখেছেন) সাথে জগাখিচুড়ি শুরু করবেন তখন আপনাকে নিয়মগুলি জানতে হবে। এবং ব্লকস ... ভাল, ব্লক মেমরি পরিচালনা ঠিক অদ্ভুত।
সুতরাং আমার বক্তব্যটি অন্তর্নিহিত মেমরি পরিচালনা এখনও গুরুত্বপূর্ণ, তবে আমি যেখানে নতুন প্রোগ্রামারদের নিয়মগুলি উল্লেখ করতে এবং পুনরায় পুনরুদ্ধার করতে উল্লেখযোগ্য সময় ব্যয় করতাম, এটিআরসি সহ এটি আরও উন্নত একটি বিষয় হয়ে উঠছে। আমি বরং বরং নতুন বিকাশকারীদের অন্তর্নিহিত কলগুলি দিয়ে তাদের মাথা পূরণ করার পরিবর্তে অবজেক্ট গ্রাফগুলির বিবেচনায় ভাবতে চাই objc_retain()
।