হ্যা এবং না. আপনি স্ট্রিং মেমরিটি মুক্তি দিবেন তবে এনএসএটোরলেজপুল অবজেক্টটি মেমরির মধ্যে ছেড়ে দেওয়ার পরিবর্তে ড্রেন ব্যবহার করে মেমরিটিতে "ফাঁস" করুন যদি আপনি এই সংগ্রহ করা আবর্জনা (মেমরি পরিচালিত নয়) পরিবেশের অধীনে চালিত হন। এই "ফুটো" জিসির অধীনে শক্তিশালী পয়েন্টারবিহীন অন্য যে কোনও অবজেক্টের মতো এনএসআউটোরলিজপুলকে "অ্যাক্সেসযোগ্য" এর উদাহরণটি সহজ করে তোলে এবং পরের বার জিসি চললে অবজেক্টটি পরিষ্কার হয়ে যায়, যা সরাসরি কল করার পরে সরাসরি হতে পারে -drain
:
ড্রেন
আবর্জনা সংগৃহীত পরিবেশে, গত সংগ্রহের পরে বরাদ্দকৃত স্মৃতি বর্তমান প্রান্তিকের চেয়ে বেশি হলে আবর্জনা সংগ্রহের সূত্রপাত করে; অন্যথায় মুক্তি হিসাবে আচরণ করে। ... আবর্জনা-সংগৃহীত পরিবেশে, এই পদ্ধতিটি শেষ পর্যন্ত কল করে objc_collect_if_needed
।
অন্যথায়, এটি -release
জি-নন-এর অধীনে কীভাবে আচরণ করে তা সাদৃশ্যপূর্ণ , হ্যাঁ। অন্যরা যেমন বলেছে যে, -release
জিসির অধীনে কোনও বিকল্প নেই, তাই জিসির অধীনে পুলের সঠিকভাবে কাজ করা -drain
এবং -drain
নন-জিসি এর -release
অধীনে ঠিক কাজ করার বিষয়টি নিশ্চিত করার একমাত্র উপায় হ'ল নন-জিসির অধীনে ঠিক কাজ করে , এবং তর্কসাপেক্ষভাবে এর কার্যকারিতা আরও স্পষ্টভাবে যোগাযোগ করে বলে আমরা হব.
আমার উল্লেখ করা উচিত যে আপনার বিবৃতিতে "নতুন, বরাদ্দ বা টিআইভি" নামে যে কোনও কিছু বলা হয় "" আরআইপি "অন্তর্ভুক্ত করা উচিত নয় (তবে" অনুলিপি "অন্তর্ভুক্ত করা উচিত) কারণ" init "মেমরি বরাদ্দ করে না, এটি কেবল অবজেক্ট সেট করে (নির্মাণকারী) ফ্যাশন)। আপনি যদি বরাদ্দযুক্ত বস্তুটি পেয়ে থাকেন এবং আপনার ফাংশনটি কেবল এই নামে পরিচিত হয় তবে আপনি এটি প্রকাশ করবেন না:
- (void)func:(NSObject*)allocd_but_not_init
{
[allocd_but_not_init init];
}
এটি ইতিমধ্যে আপনি যেটি শুরু করেছিলেন তার চেয়ে বেশি কোনও মেমোরি গ্রাস করে না (ধরে নেওয়া হয় যে ডিআই অবজেক্টগুলি ইনস্ট্যান্ট করে না, তবে আপনি সেগুলির জন্য দায়বদ্ধ নন)।