নতুন স্বয়ংক্রিয় রেফারেন্স গণনা পদ্ধতি কীভাবে কাজ করে?


206

কেউ আমাকে সংক্ষেপে ব্যাখ্যা করতে পারেন কীভাবে এআরসি কাজ করে? আমি জানি এটি আবর্জনা সংগ্রহের থেকে পৃথক, তবে আমি কীভাবে এটি কাজ করে তা ঠিক ভাবছিলাম।

এছাড়াও, যদি এআরসি পারফরম্যান্সকে বাধা না দিয়ে জিসি যা করে, তবে জাভা কেন জিসি ব্যবহার করে? কেন এটি আরসি ব্যবহার করে না?


2
এটি আপনাকে এ সম্পর্কে সমস্ত কিছু বলবে: http://clang.llvm.org/docs/A AutomaticReferencesCounting.html এটি কীভাবে এক্সকোড এবং আইওএস 5 এ বাস্তবায়িত হয় এনডিএর অধীনে।
মর্টেন দ্রুত

14
@mbehan এটি খারাপ পরামর্শ। আমি আইওএস ডেভ সেন্টারের জন্য লগইন করতে বা এমনকি একটি অ্যাকাউন্ট রাখতে চাই না, তবে তবুও আমি এআরসি সম্পর্কে জানতে আগ্রহী।
আন্দ্রেস এফ।

1
এআরসি জিসি যা কিছু করে তা করে না, এর জন্য আপনাকে দৃ strong় এবং দুর্বল রেফারেন্স শব্দার্থবিজ্ঞানের সাথে স্পষ্টভাবে কাজ করা দরকার, এবং যদি আপনি সঠিকভাবে না পান তবে মেমরি ফাঁস হয়। আমার অভিজ্ঞতা হিসাবে, আপনি যখন উদ্দেশ্য-সি-তে ব্লকগুলি ব্যবহার করেন তখন এটি প্রথম জটিল এবং আপনি কৌশলগুলি শিখার পরেও আপনার ব্লকের অনেকগুলি ব্যবহারের আশেপাশে কিছু বিরক্তিকর (আইএমও) বয়লারপ্লেট কোড বাকি রয়েছে। শক্তিশালী / দুর্বল উল্লেখগুলি ভুলে যাওয়া আরও সুবিধাজনক It's তদুপরি, জিসি আরসি আর্টের চেয়ে কিছুটা ভাল পারফর্ম করতে পারে। সিপিইউ, তবে আরও মেমরির প্রয়োজন। যখন আপনার প্রচুর স্মৃতি থাকে তখন এটি সুস্পষ্ট মেমরি পরিচালনার চেয়ে দ্রুততর হতে পারে।
তেলানুব

@ টেলানুব: "আরও স্মৃতি দরকার"। অনেক লোক এটি বলে তবে বিশ্বাস করা আমার পক্ষে কঠিন।
জন হ্যারোপ

2
@ জোনহরপ: সত্যি বলতে কী আমি কেন বলেছিলাম তা এখনও মনে নেই। :-) ইতিমধ্যে আমি বুঝতে পেরেছিলাম যে অনেকগুলি বিভিন্ন জিসি কৌশল রয়েছে যে এই জাতীয় কম্বল বিবৃতি সম্ভবত সমস্ত মূল্যহীন। আমাকে তাঁর মেমোরি বরাদ্দকথার পৌরাণিক কাহিনী এবং অর্ধ-সত্য থেকে হান্স বোহম আবৃত্তি করা যাক : "কেন এই অঞ্চলটি সন্দেহজনক লোক-জ্ঞানের পক্ষে এত প্রবণ?"
টেলানুব

উত্তর:


244

অবজেক্টিভ-সি-তে আসা প্রতিটি নতুন বিকাশকারীকে কখন অবজেক্টগুলি বজায় রাখতে হবে, ছেড়ে দিতে হবে এবং স্বতঃপ্রণোদিত করার কঠোর নিয়ম শিখতে হবে। এই নিয়মগুলি এমনকি নামকরণের সম্মেলনগুলিও নির্দিষ্ট করে যা পদ্ধতিগুলি থেকে প্রত্যাবর্তিত অবজেক্টের গণনা রোধ করে। অবজেক্টিভ-সি-তে মেমরি পরিচালনা দ্বিতীয় প্রকৃতির হয়ে ওঠে যখন আপনি এই নিয়মগুলিকে মনে রাখেন এবং ধারাবাহিকভাবে প্রয়োগ করেন, তবে এমনকি সবচেয়ে অভিজ্ঞ কোকো বিকাশকারীরা সময়ে সময়ে পিছলে যায়।

ক্ল্যাং স্ট্যাটিক অ্যানালাইজারের সাহায্যে, এলএলভিএম বিকাশকারীরা বুঝতে পেরেছিলেন যে এই বিধিগুলি যথেষ্ট নির্ভরযোগ্য যে তারা আপনার কোডটি যে পথে নেয় সেগুলির মধ্যে মেমরি ফাঁস এবং ওভাররিলিজগুলি নির্দেশ করার জন্য একটি সরঞ্জাম তৈরি করতে পারে।

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

তবে এটি আপনাকে এই প্ল্যাটফর্মগুলিতে মেমরি পরিচালনা সম্পর্কে উদ্বিগ্ন হতে পুরোপুরি মুক্তি দেয় না। আমি এখানে আমার উত্তরে (চক্র ধরে রাখার জন্য) নজর রাখার জন্য প্রাথমিক সমস্যাটি বর্ণনা করছি , যা দুর্বল পয়েন্টার চিহ্নিত করতে আপনার পক্ষ থেকে একটু চিন্তাভাবনার প্রয়োজন হতে পারে। যাইহোক, আপনি এআরসি-তে যা অর্জন করছেন তার তুলনায় এটি অপ্রয়োজনীয়।

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

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

ডাব্লুডাব্লুডিসিতে এই হতবাক বিকাশকারীদের মোড়ক উন্মোচন করা হয়েছে, সুতরাং লোকেরা সচেতন ছিল না যে এরকম কিছু করা যেতে পারে। এটি সময়ের সাথে সাথে অন্যান্য প্ল্যাটফর্মে উপস্থিত হতে পারে তবে আপাতত এটি এলএলভিএম এবং উদ্দেশ্য-সি এর জন্য একচেটিয়া।


56
জোর খনি: এটি আপনাকে মেমরির পরিচালনা সম্পর্কে উদ্বিগ্ন হতে পুরোপুরি মুক্তি দেয় না
bshirley

6
এআরসি আসলেই কি নতুনত্ব? আপনার উত্তর থেকে আমি উপসংহারে পৌঁছেছি যে এআরসি একটি নতুন ধারণা, যা প্রথমবারের জন্য অবজেক্টিভ-সিতে ব্যবহৃত হয় (আমি ভুল হলে আমাকে সংশোধন করি)। সত্যি কথা বলতে কি, আমি কোনও উদ্দেশ্য-সি বিকাশকারী নই এবং এআরসি সম্পর্কে খুব বেশি কিছু জানি না, তবে কি বুস্ট শেয়ার্ড পয়েন্টারগুলি (বুস্ট.অর্গ দেখুন) ঠিক একই জিনিস নয়? এবং যদি তারা না হয় তবে পার্থক্য কী?
TheDmi

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

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

2
@ থিমডি: "এআরসি কি আসলেই একটি উদ্ভাবন?"। স্বয়ংক্রিয় রেফারেন্স গণনা 1960 সালে উদ্ভাবিত হয়েছিল এবং পাইথন এবং ম্যাথমেটিকার মতো অনেক ভাষায় ব্যবহৃত হয়েছে। এটি জেভিএম বা সিএলআর ব্যবহার করা হয় না কারণ এটি খুব ধীর এবং চক্র ফাঁস হয়।
জন হ্যারোপ

25

এআরসি কেবল পুরানো রক্ষণ / রিলিজ (এমআরসি) খেলে কম্পাইলারটি কখন রক্ষণ / রিলিজ কল করতে হবে তা নির্ধারণ করে। এটিতে জিসি সিস্টেমের চেয়ে উচ্চতর কর্মক্ষমতা, নিম্ন শিখরের মেমরির ব্যবহার এবং আরও অনুমানযোগ্য পারফরম্যান্স থাকে।

অন্যদিকে এআরসি (বা এমআরসি) দিয়ে কিছু ধরণের ডেটা স্ট্রাকচার সম্ভব নয়, অন্যদিকে জিসি সেগুলি পরিচালনা করতে পারে।

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

ভালো লেগেছে:

A -> [B1, B2, B3]
B1 -> A, B2 -> A, B3 -> A

আপনি এ ব্যবহার করার সময় সমস্ত কিছু ঠিক আছে (স্থানীয় ভেরিয়েবলের মাধ্যমে বলুন)।

আপনি এটি (এবং বি 1 / বি 2 / বি 3) সম্পন্ন করার পরে, একটি জিসি সিস্টেম অবশেষে স্ট্যাক এবং সিপিইউ নিবন্ধগুলি থেকে শুরু করে এটি সন্ধান করতে পারে এমন সমস্ত কিছু দেখার সিদ্ধান্ত নেবে। এটি এ, বি 1, বি 2, বি 3 কখনই খুঁজে পাবে না তাই এটি তাদের চূড়ান্ত করে এবং স্মৃতিটিকে অন্য বস্তুতে পুনর্ব্যবহার করবে।

আপনি যখন আরসি বা এমআরসি ব্যবহার করেন এবং এ এর ​​সাথে শেষ করেন এটির 3 (বি 1, বি 2, এবং বি 3 এর সমস্ত রেফারেন্স) থাকে এবং বি 1 / বি 2 / বি 3 এর 1 এর রেফারেন্স গণনা থাকে (এ এর এনএসআরাইতে একটি রেফারেন্স থাকে প্রতিটি)। তাই এগুলি সমস্তই জীবিত থাকে যদিও কোনও কিছুই সেগুলি ব্যবহার করতে পারে না।

সাধারণ সমাধান হ'ল সেই উল্লেখগুলির মধ্যে একটিকে দুর্বল হওয়া দরকার (রেফারেন্স গণনায় অবদান নয়) to এটি কিছু ব্যবহারের ধরণগুলির জন্য কাজ করবে, উদাহরণস্বরূপ যদি আপনি B1 / B2 / B3 কেবলমাত্র A. এর মাধ্যমে উল্লেখ করেন তবে অন্য নিদর্শনগুলিতে এটি ব্যর্থ হয়। উদাহরণস্বরূপ যদি আপনি মাঝে মাঝে বি 1 ধরে রাখেন, এবং অভিভাবক পয়েন্টারটির মাধ্যমে ফিরে যেতে পারেন এবং এ আবিষ্কার করবেন এমন এক দুর্বল রেফারেন্সের সাথে আপনি যদি কেবল B1 তে ধরে থাকেন তবে ক্যান (এবং সাধারণভাবে ইচ্ছামত) বাষ্পীভূত হয়ে B2 এবং B3 নেবে এর সাথে.

কখনও কখনও এটি কোনও সমস্যা নয়, তবে ডেটা জটিল কাঠামোর সাথে কাজ করার কয়েকটি খুব দরকারী এবং প্রাকৃতিক উপায়গুলি এআরসি / এমআরসি ব্যবহার করা খুব কঠিন।

সুতরাং এআরসি একই ধরণের সমস্যা জিসি লক্ষ্যবস্তু করে। তবে এআরসি ব্যবহারের নিদর্শনগুলির আরও সীমিত সেটগুলিতে কাজ করে তারপরে জিসি, সুতরাং আপনি যদি একটি জিসি ভাষা নেন (জাভা এর মতো) এবং এতে আরসি-র মতো কিছু আঁকেন তবে কিছু প্রোগ্রাম আর কাজ করবে না (বা কমপক্ষে পরিত্যক্ত মেমোরি তৈরি করবে) , এবং গুরুতর অদলবদল সমস্যা সৃষ্টি করতে পারে বা মেমরি বা অদলবদূর স্থান দখল করতে পারে)।

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


"অন্যদিকে এআরসি দিয়ে কিছু ধরণের ডেটা স্ট্রাকচার সম্ভব নয়" আমার ধারণা আপনি বোঝাতে চেয়েছিলেন যে ইঙ্গিত ছাড়াই স্বয়ংক্রিয় পরিচ্ছন্নতা সম্ভব নয়; স্পষ্টতই, তথ্য কাঠামো হয়।
স্টিভেন ফিশার

অবশ্যই, তবে কেবলমাত্র ওজজিসি অবজেক্টের স্বয়ংক্রিয় ক্লিনআপ এআরসি এর অধীনে উপলব্ধ "তাই কোনও স্বয়ংক্রিয় ক্লিনআপ" == "কোনও ক্লিনআপ নেই"। আমি যখন আমার আরও সময় পাব তখন আমি জবাব দেব।
স্ট্রিপস

@ স্ট্রিপস: এআরসি তে ম্যানুয়াল ক্লিনআপের সমতুল্য হ'ল চক্রের ম্যানুয়াল ব্রেকিং, যেমন foo = nil
ডগলাস

"[এআরসি] উচ্চতর পারফরম্যান্সের ঝোঁক রাখবে ... এআরসি পারফরম্যান্সকে আরও বেশি অগ্রাধিকার দেয়"। আমি অবাক হয়ে শুনেছি যে যখন এটি সুপরিচিত ছিল যে আবর্জনা সংগ্রহের সন্ধানের চেয়ে রেফারেন্স গণনা অনেক ধীর। উড়ালফ্রোগব্লগ.ব্লগস্পট.কম.১০/১০
জন

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

4

জাদু

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

কিছু অন্যান্য উন্নতিগুলির মধ্যে রয়েছে শূন্যমান দুর্বল উল্লেখগুলি, গাদা থেকে ব্লকের স্বয়ংক্রিয় অনুলিপি, বোর্ড জুড়ে স্পিডআপস (অটোরিলিজ পুলের 6x!)।

এআরসি- র এলএলভিএম ডক্সে কীভাবে এই সমস্ত কাজগুলি পাওয়া যায় সে সম্পর্কে আরও বিস্তারিত আলোচনা ।


2
-1 "এআরসি একটি সংকলন সময় প্রযুক্তি, এটি জিসির মতো নয় যা রানটাইম এবং এটি আপনার পারফরম্যান্সকে নেতিবাচকভাবে প্রভাবিত করবে"। রেফারেন্স গণনাগুলি রান-টাইমে বাম্প করা হয় যা খুব অকার্যকর। এজন্য জেভিএম এবং .NET এর মতো জিসিগুলি এত বেশি দ্রুতগতিতে পাওয়া।
জন হ্যারোপ

1
@ জন: আপনার কাছে কি এর প্রমাণ আছে? আমার নিজের পড়া থেকে মনে হয় যে নতুন আরসি অ্যালগরিদমগুলি সাধারণত এমএন্ডএস জিসির চেয়ে ভাল বা আরও ভাল পারফর্ম করে।
xryl669

1
@ xryl669: জিসি হ্যান্ডবুক ( g Chandbook.org ) এ সম্পূর্ণ ব্যাখ্যা রয়েছে । লক্ষ্য করুন যে ট্রেসিং! = এমএন্ডএস।
জন হ্যারোপ

3

এটি আবর্জনা সংগ্রহ থেকে পৃথকভাবে পরিবর্তিত হয়। আপনি কি সতর্কতা দেখেছেন যা আপনাকে জানিয়েছে যে আপনি বিভিন্ন লাইনে অবজেক্টগুলি ফাঁস করতে পারেন? এমনকি এই বিবৃতিগুলি আপনাকে কী লাইনে অবজেক্টটি বরাদ্দ করেছে তা বলে দেয়। এটি আরও একধাপ এগিয়ে নিয়ে গেছে এবং এখন প্রায় 100% সময়, বেশিরভাগ প্রোগ্রামারদের চেয়ে ভাল, সঠিক স্থানে retain/ releaseবিবৃতি সন্নিবেশ করতে পারে । মাঝেমধ্যে রক্ষণশীল অবজেক্টগুলির কিছু অদ্ভুত উদাহরণ রয়েছে যা আপনাকে এটির সাহায্য করার প্রয়োজন হয়।


0

অ্যাপল বিকাশকারী ডকুমেন্টেশন দ্বারা খুব ভালভাবে ব্যাখ্যা করা হয়েছে। "এআরসি কীভাবে কাজ করে" পড়ুন

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

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

ডিফ জানতে বর্জ্য সংগ্রহ ও এআরসি মধ্যে: পড়ুন এই


0

এআরসি একটি সংকলক বৈশিষ্ট্য যা বস্তুর স্বয়ংক্রিয় মেমরি পরিচালনা সরবরাহ করে।

পরিবর্তে আপনাকে কখন ব্যবহার করতে হবে তা মনে রাখার পরিবর্তে retain, release, এবং autoreleaseএআরসি আপনার সামগ্রীর আজীবন প্রয়োজনীয়তাগুলি মূল্যায়ন করে এবং স্বয়ংক্রিয়ভাবে সংকলনের সময় উপযুক্ত মেমরি পরিচালনার কলগুলি সন্নিবেশ করায়। সংকলকটি আপনার জন্য উপযুক্ত dealloc পদ্ধতি উত্পন্ন করে।

সংকলক retain/releaseসংকলন সময়ে প্রয়োজনীয় কল সন্নিবেশ করায় , কিন্তু সেই কলগুলি রানটাইম সময়ে কার্যকর হয় অন্য কোনও কোডের মতো।

নিম্নলিখিত চিত্রটি আপনাকে এআরসি কীভাবে কাজ করে সে সম্পর্কে আরও ভাল ধারণা দেয়।

এখানে চিত্র বর্ণনা লিখুন

যারা আইওএস বিকাশে নতুন এবং উদ্দেশ্য সি তে কাজের অভিজ্ঞতা নেই তাদের দয়া করে মেমরি পরিচালনার আরও ভাল বোঝার জন্য অ্যাডভান্সড মেমরি ম্যানেজমেন্ট প্রোগ্রামিং গাইডের জন্য অ্যাপলের ডকুমেন্টেশনটি দেখুন ।

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