Weak এবং Strong রেফারেন্স (references) অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ে ব্যবহৃত দুটি প্রধান রেফারেন্স টাইপ, যেগুলি মেমরি ম্যানেজমেন্টের ক্ষেত্রে গুরুত্বপূর্ণ ভূমিকা পালন করে। Objective-C তে memory management এবং Automatic Reference Counting (ARC) ব্যবহারের মাধ্যমে, আমরা এই রেফারেন্স টাইপগুলো ব্যবহার করি যাতে কোডের মেমরি ব্যবহারের ওপর নিয়ন্ত্রণ রাখা যায়। এই দুটি রেফারেন্সের মধ্যে পার্থক্য জানার আগে, ARC কিভাবে কাজ করে তা বুঝে নেয়া প্রয়োজন।
ARC (Automatic Reference Counting)
ARC একটি মেমরি ম্যানেজমেন্ট মেকানিজম, যা অবজেক্টগুলোকে ম্যানেজ করে এবং মেমরি রিলিজের কাজ স্বয়ংক্রিয়ভাবে করে। ARC স্বয়ংক্রিয়ভাবে একটি অবজেক্টের রেফারেন্স কাউন্ট ট্র্যাক করে এবং যখন আর কোনো রেফারেন্স থাকে না, তখন অবজেক্টটিকে মেমরি থেকে রিলিজ করে।
ARC-এ সাধারণত তিন ধরনের রেফারেন্স ব্যবহৃত হয়:
- Strong References
- Weak References
- Unowned References (Swift তে ব্যবহৃত হয়)
1. Strong Reference
Strong Reference একটি রেফারেন্স টাইপ যেখানে, যখন একটি অবজেক্টের সাথে যুক্ত থাকে, তখন রেফারেন্স কাউন্ট বাড়ে এবং সেই অবজেক্টটি মেমরিতে টিকে থাকে যতক্ষণ না রেফারেন্সটি মুক্ত করা হয়। সাধারণভাবে, strong রেফারেন্স ব্যবহৃত হয় যখন আপনি চান যে একটি অবজেক্ট যতক্ষণ পর্যন্ত প্রয়োজনে থাকবে, ততক্ষণ তার মেমরি রিলিজ না হয়।
Strong Reference এর বৈশিষ্ট্য:
- অবজেক্টের রেফারেন্স কাউন্ট বৃদ্ধি করে।
- অবজেক্টটি যতক্ষণ পর্যন্ত strong রেফারেন্স দ্বারা ধরে রাখা হয়, ততক্ষণ অবজেক্টটি মেমরিতে থাকবে।
- অবজেক্টটির মেমরি রিলিজ হবে না যতক্ষণ না
nilকরা হয় বা রেফারেন্সটি মুক্ত হয়।
উদাহরণ:
@interface MyClass : NSObject
@property (strong, nonatomic) NSString *name;
@end
@implementation MyClass
// এখানে 'name' একটি strong reference
@endএখানে name প্রপার্টি একটি strong রেফারেন্স। যখন name অবজেক্টে একটি মান (যেমন "John") সেট করা হয়, তখন সেই অবজেক্ট মেমরিতে থাকবে যতক্ষণ না name এর মান nil করা হয় বা রেফারেন্সটি মুক্ত হয়।
2. Weak Reference
Weak Reference একটি রেফারেন্স টাইপ, যা একটি অবজেক্টকে ধরে রাখে, কিন্তু অবজেক্টটির রেফারেন্স কাউন্ট বাড়ায় না। এর মানে হল যে, যদি অবজেক্টটি আর কোনো strong reference দ্বারা রেফারেন্স না হয়, তবে weak reference অবজেক্টের রেফারেন্স কাউন্ট বাড়ানোর মাধ্যমে সেই অবজেক্টকে মেমরিতে ধরে রাখে না। এর ফলে, অবজেক্টটি nil হয়ে যেতে পারে এবং এর মানে হল যে, weak reference কোন সময়ে একটি dangling reference হতে পারে, তাই এটি nil হয়ে যাবে।
Weak Reference এর বৈশিষ্ট্য:
- রেফারেন্স কাউন্ট বাড়ায় না, অর্থাৎ এটি মেমরি লিকের সমস্যা সৃষ্টি না করার জন্য ব্যবহার করা হয়।
- nil হতে পারে যখন মূল অবজেক্ট আর কোনো strong reference দ্বারা রেফারেন্স করা হয় না।
- সাধারণত delegate প্রপার্টি বা সাইক্লিক ডিপেনডেন্সি (যেমন, মেমরি লিক রোধ) এর ক্ষেত্রে ব্যবহৃত হয়।
উদাহরণ:
@interface MyClass : NSObject
@property (weak, nonatomic) id delegate;
@end
@implementation MyClass
// এখানে 'delegate' একটি weak reference
@endএখানে delegate একটি weak রেফারেন্স। এর মানে হলো, যখন delegate আর কোনো strong reference দ্বারা রেফারেন্স করা হবে না, তখন এটি nil হয়ে যাবে, এবং অবজেক্টের মেমরি রিলিজ হবে।
Strong এবং Weak Reference এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Strong Reference | Weak Reference |
|---|---|---|
| মেমরি ম্যানেজমেন্ট | রেফারেন্স কাউন্ট বৃদ্ধি করে, অবজেক্টকে ধরে রাখে | রেফারেন্স কাউন্ট বৃদ্ধি করে না, অবজেক্টকে nil করে দেয় |
| অবজেক্ট মেমরি রিলিজ | যতক্ষণ পর্যন্ত strong রেফারেন্স আছে, অবজেক্ট রিলিজ হয় না | অবজেক্ট যখন আর কোনো strong reference দ্বারা রেফারেন্স করা হয় না, তখন এটি nil হয়ে যায় |
| ব্যবহার | সাধারণত অবজেক্ট সংরক্ষণ করতে, যেমন ডেটা, স্টোরেজ ইত্যাদি | সাধারণত ডেলিগেট অথবা সাইক্লিক ডিপেনডেন্সি এড়াতে ব্যবহৃত হয় |
| রেফারেন্স কাউন্ট | রেফারেন্স কাউন্ট বাড়ায় | রেফারেন্স কাউন্ট বাড়ায় না |
| উদাহরণ | প্রপার্টি সেটিং, কোড লজিকাল ডেটা অ্যাসাইনমেন্ট | ডেলিগেট প্রপার্টি, ঐতিহ্যগত সাইক্লিক রেফারেন্স গুলি |
3. weak রেফারেন্সের জন্য সাধারণ ব্যবহার
Delegate Pattern এ weak reference ব্যবহার করা হয় যাতে মেমরি লিক বা সাইক্লিক ডিপেনডেন্সি এড়ানো যায়। এক্ষেত্রে, ডেলিগেট অবজেক্ট সাধারণত weak রেফারেন্স হয়, যাতে ডেলিগেট অবজেক্টটি মেমরি লিক না হয়।
উদাহরণ (Delegate Pattern):
@protocol MyDelegate <NSObject>
- (void) didFinishTask;
@end
@interface MyClass : NSObject
@property (weak, nonatomic) id<MyDelegate> delegate; // weak reference
@endএখানে delegate একটি weak রেফারেন্স, যাতে ডেলিগেট অবজেক্টের কারণে মেমরি লিক না ঘটে।
সারাংশ
- Strong Reference: অবজেক্টের রেফারেন্স কাউন্ট বৃদ্ধি করে এবং অবজেক্ট মেমরিতে থাকবে যতক্ষণ না সেই রেফারেন্সটি
nilকরা হয় বা মুক্ত করা হয়। - Weak Reference: অবজেক্টের রেফারেন্স কাউন্ট বৃদ্ধি করে না এবং যখন অবজেক্ট আর কোনো strong reference দ্বারা রেফারেন্স করা হয় না, তখন এটি
nilহয়ে যায়। এটি মেমরি লিক প্রতিরোধ করতে ব্যবহৃত হয়।
Strong references সাধারণত যখন আপনি চান যে একটি অবজেক্ট ততক্ষণ মেমরিতে থাকতে পারে যতক্ষণ না তার রেফারেন্স থাকে, তখন ব্যবহার হয়। অন্যদিকে, Weak references ব্যবহৃত হয় যখন আপনি চান না যে একটি অবজেক্ট অতিরিক্ত রেফারেন্স কাউন্ট বাড়িয়ে মেমরিতে আটকে থাকুক, যেমন ডেলিগেট বা সাইক্লিক রেফারেন্স এড়ানোর জন্য।
Read more