Objective-C তে মেমরি ম্যানেজমেন্ট অত্যন্ত গুরুত্বপূর্ণ। প্রথম দিকে, Objective-C তে মেমরি ম্যানেজমেন্ট ম্যানুয়ালি পরিচালিত হতে হত, যেখানে retain, release, এবং autorelease কিওয়ার্ড ব্যবহার করা হতো। ম্যানুয়াল রেফারেন্স কাউন্টিং (MRC) পদ্ধতিতে মেমরি ব্যবস্থাপনা করার জন্য এই কিওয়ার্ডগুলি ব্যবহার করা হয়। তবে বর্তমানে Automatic Reference Counting (ARC) ব্যবহৃত হয়, যা এই ম্যানুয়াল মেমরি ম্যানেজমেন্টের চেয়ে সহজ এবং নিরাপদ।
এখানে retain, release, এবং autorelease এর বিস্তারিত ব্যাখ্যা দেওয়া হয়েছে।
১. retain কিওয়ার্ড
retain কিওয়ার্ডটি একটি অবজেক্টের রেফারেন্স কাউন্ট বাড়াতে ব্যবহৃত হয়। যখন একটি অবজেক্টকে retain করা হয়, তখন অবজেক্টটি মেমরিতে ধরে রাখা হয় যতক্ষণ না release বা autorelease করা না হয়।
retain এর ব্যবহার:
retainব্যবহার করার মাধ্যমে, আপনি একটি অবজেক্টের রেফারেন্স কাউন্ট বৃদ্ধি করেন, যাতে সেই অবজেক্টটি মেমরিতে থাকে যতক্ষণ না এটি আর প্রয়োজন হয়।- এটি মূলত অবজেক্টের মালিকানা দাবি করে।
উদাহরণ:
NSString *str = [[NSString alloc] initWithString:@"Hello, Objective-C!"];
[str retain]; // retain কিওয়ার্ড ব্যবহার করা
NSLog(@"%@", str);এখানে, str অবজেক্টটি retain করা হয়েছে, যার মানে এটি রেফারেন্স কাউন্ট বাড়িয়ে মেমরি ম্যানেজমেন্টে ধরে রাখা হচ্ছে।
২. release কিওয়ার্ড
release কিওয়ার্ডটি একটি অবজেক্টের রেফারেন্স কাউন্ট কমিয়ে দেয়। যখন রেফারেন্স কাউন্ট শূন্যে চলে আসে, তখন অবজেক্টটি মেমরি থেকে সরিয়ে নেওয়া হয় এবং ডিলিট হয়ে যায়।
release এর ব্যবহার:
releaseব্যবহার করলে, অবজেক্টের রেফারেন্স কাউন্ট কমে যায়। যদি রেফারেন্স কাউন্ট শূন্য হয়ে যায়, তাহলে অবজেক্টটি deallocated হয়, অর্থাৎ মেমরি থেকে সরিয়ে নেওয়া হয়।- সাধারণত, যখন অবজেক্টটির আর প্রয়োজন থাকে না, তখন
releaseকরা হয়।
উদাহরণ:
NSString *str = [[NSString alloc] initWithString:@"Hello, Objective-C!"];
[str release]; // release কিওয়ার্ড ব্যবহার করাএখানে, str অবজেক্টটি release করা হয়েছে, যা তার রেফারেন্স কাউন্ট কমিয়ে দেয়।
৩. autorelease কিওয়ার্ড
autorelease কিওয়ার্ডটি retain এবং release এর সাথে সম্পর্কিত। যখন কোনো অবজেক্টকে autorelease করা হয়, তখন তা একটি autorelease pool এ রাখা হয় এবং পরবর্তীতে একটি নির্দিষ্ট সময়ে (অর্থাৎ, পুলটি ফ্লাশ হওয়া পর্যন্ত) release হয়। এটি সাধারণত যখন অবজেক্টটির জীবনকাল সীমিত, তবে আপনি রেফারেন্স কাউন্ট সঠিকভাবে পরিচালনা করতে চান না, তখন ব্যবহৃত হয়।
autorelease এর ব্যবহার:
autoreleaseঅবজেক্টটি autorelease pool এ যোগ করে, এবং পরবর্তীতে অ্যাপ্লিকেশন বা থ্রেডের জীবনচক্র শেষে সেই অবজেক্টটি মুক্ত করা হয়।- এটি ARC ব্যবস্থায় ব্যবহৃত হয় না, তবে MRC ব্যবস্থায় এটি ব্যবহৃত হয়, যখন আপনি চান যে অবজেক্টটি এক নির্দিষ্ট সময়ে রিলিজ হবে, কিন্তু আপনি এটি সরাসরি
releaseকরতে চান না।
উদাহরণ:
NSString *str = [[[NSString alloc] initWithString:@"Hello, Objective-C!"] autorelease]; // autoreleaseএখানে autorelease ব্যবহার করা হয়েছে, যার মানে হলো str অবজেক্টটি autorelease pool এ যুক্ত হবে এবং পরবর্তীতে মেমরি ম্যানেজমেন্ট সিস্টেম তা মুক্ত করে দেবে।
retain, release, এবং autorelease এর মধ্যে পার্থক্য
| কিওয়ার্ড | ব্যবহার |
|---|---|
retain | অবজেক্টের রেফারেন্স কাউন্ট বাড়িয়ে অবজেক্টটিকে মেমরি থেকে মুক্ত হতে বাধা দেয়। |
release | অবজেক্টের রেফারেন্স কাউন্ট কমিয়ে দেয়। যদি রেফারেন্স কাউন্ট শূন্য হয়, অবজেক্টটি মেমরি থেকে সরিয়ে নেয়। |
autorelease | অবজেক্টকে autorelease pool এ যোগ করে, এবং পরে এটি release হয়ে যায়। |
ARC (Automatic Reference Counting) এবং MRC
- MRC (Manual Reference Counting): Objective-C তে ম্যানুয়াল মেমরি ম্যানেজমেন্ট সিস্টেম ছিল, যেখানে
retain,release, এবংautoreleaseকিওয়ার্ড ব্যবহার করা হতো। এতে ডেভেলপারদেরকে মেমরি ম্যানেজমেন্ট পুরোপুরি নিজে করতে হত। - ARC (Automatic Reference Counting): আধুনিক Objective-C তে ARC ব্যবহৃত হয়, যেখানে মেমরি ম্যানেজমেন্ট স্বয়ংক্রিয়ভাবে করা হয়। এখানে
retain,release, এবংautoreleaseআর ব্যবহৃত হয় না। ARC স্বয়ংক্রিয়ভাবে অবজেক্টের রেফারেন্স কাউন্ট পরিচালনা করে।
ARC এবং MRC ব্যবস্থার মধ্যে পার্থক্য
| বৈশিষ্ট্য | MRC (Manual) | ARC (Automatic) |
|---|---|---|
| মেমরি ম্যানেজমেন্ট | ডেভেলপারকে retain, release, autorelease ম্যানুয়ালি করতে হয় | ARC স্বয়ংক্রিয়ভাবে মেমরি ম্যানেজমেন্ট পরিচালনা করে। |
| সুরক্ষা | ডেভেলপারকে ভুল করার সম্ভাবনা থাকে | ARC সিস্টেম স্বয়ংক্রিয়ভাবে ভুল কমায়। |
| বাজার | পুরনো অ্যাপ্লিকেশন এবং লাইব্রেরি | আধুনিক অ্যাপ্লিকেশন এবং নতুন কোডে ব্যবহৃত। |
ARC তে retain, release, autorelease এর কাজ
ARC ব্যবহারের সময়ে retain, release, এবং autorelease কিওয়ার্ডগুলো আর ব্যবহৃত হয় না। ARC স্বয়ংক্রিয়ভাবে retain, release, এবং autorelease এর কাজ সম্পন্ন করে। এই কারণে ডেভেলপারদেরকে এখন মেমরি ম্যানেজমেন্ট নিয়ে চিন্তা করার দরকার নেই, ARC এর স্বয়ংক্রিয় ব্যবস্থাপনা এতে সুবিধা দেয়।
সারাংশ
retain: অবজেক্টের রেফারেন্স কাউন্ট বাড়িয়ে মেমরিতে ধরে রাখে।release: অবজেক্টের রেফারেন্স কাউন্ট কমিয়ে দেয় এবং রেফারেন্স কাউন্ট শূন্য হলে অবজেক্ট মেমরি থেকে সরিয়ে নেয়।autorelease: অবজেক্টটিকে autorelease pool এ যোগ করে, পরে তা release হয়ে যায়।
Objective-C তে MRC ব্যবহৃত সময়ে ডেভেলপারদেরকে মেমরি ম্যানেজমেন্ট খুব সাবধানে করতে হয়, কিন্তু ARC ব্যবহারের সময় এটি স্বয়ংক্রিয়ভাবে পরিচালিত হয়, যা কোডকে আরও সোজা ও নিরাপদ করে তোলে।
Read more