উত্তর:
ইতিমধ্যে যা ইঙ্গিত করা হয়েছে তা ছাড়াও, আমি পিছনে যুক্তি সম্পর্কে আরও বিস্তৃত করতে চেয়েছিলাম -viewDidUnload।
এটি বাস্তবায়নের অন্যতম গুরুত্বপূর্ণ কারণ হ'ল UIViewControllerউপশ্রেণীতে সাধারণত ভিউ হায়ারার্কির বিভিন্ন সাবভিউতে মালিকানার রেফারেন্স থাকে। উদাহরণস্বরূপ, IBOutletsকোনও নিব থেকে লোড করার সময়, বা প্রোগ্রামের ভিতরে ভিতরে এই বৈশিষ্ট্যগুলি সেট করা যেতে পারে -loadView।
সাবউভিউগুলির অতিরিক্ত মালিকানাটির UIViewControllerঅর্থ এই যে এমনকি ভিউয়ের স্তরবিন্যাস থেকে তার দৃষ্টিভঙ্গি সরিয়ে ফেলা হয় এবং মেমরি সংরক্ষণের জন্য প্রকাশ করা হয়, যার মাধ্যমে সংক্ষিপ্তসারগুলিও দৃশ্যের দ্বারা প্রকাশ করা হয়, সেগুলি প্রকৃতপক্ষে বিলোপযুক্ত হবে না কারণ UIViewControllerনিজে এখনও তার নিজস্ব বকেয়া রয়েছে সেই সাথে objects অবজেক্টের রেফারেন্স ধরে রাখা। মুক্তি UIViewControllerএগুলোর অতিরিক্ত মালিকানা নিশ্চিত তারা বিনামূল্যে মেমরির পাশাপাশি deallocated করা হবে অবজেক্ট।
আপনি এখানে প্রকাশিত অবজেক্টগুলি সাধারণত পুনরায় তৈরি করা হয় এবং UIViewControllerদৃশ্যটি যখন re-loadedকোনও নিব থেকে হয় বা প্রয়োগের মাধ্যমে হয় তখন তা আবার সেট করা হয় -loadView।
এছাড়াও মনে রাখবেন যে UIViewController viewসম্পত্তিটি nilযখন এই পদ্ধতিটি বলা হয় ততক্ষণে।
ডকুমেন্টেশন যেমন বলে :
লো-মেমোরি অবস্থার সময় এটিকে বলা হয় যখন মেমরি মুক্ত করার জন্য ভিউ কন্ট্রোলারের নিজের দৃষ্টিভঙ্গি এবং সেই দৃশ্যের সাথে সম্পর্কিত কোনও অবজেক্ট প্রকাশ করতে হয়।
একই পরিস্থিতিতে ডাকা deallocহয় না । এই পদ্ধতিটি কেবল ওএস 3 এবং এর উপরে রয়েছে। আইফোন ওএস ২.x একই পরিস্থিতি মোকাবেলা করা ছিল আসল ব্যথা!
জুলাই ২০১৫ আপডেট করুন : এটি লক্ষ করা উচিত যে viewDidUnloadআইওএস in এ অবমূল্যায়ন করা হয়েছিল কারণ "ভিউগুলি আর কম-স্মৃতিশক্তির অবস্থার অধীনে শুদ্ধ হয় না এবং তাই এই পদ্ধতিটি কখনই ডাকা হয় না।" সুতরাং, আধুনিক পরামর্শটি এটি সম্পর্কে চিন্তা করা এবং ব্যবহার করার নয় dealloc।
এর কারণ আপনি সাধারণত সেট হবে @propertyযেমন "(nonatomic, retain)"এবং এই ধরনের সেটার জন্য আপনাকে বর্তমান বস্তুর প্রকাশ তৈরি করা হয় যে হিসাবে এবং তারপর যুক্তি অর্থাত বজায়
self.property = nil;
... এর লাইনে কিছু করে:
[property release];
property = [nil retain];
সুতরাং আপনি একটি পাথর দিয়ে দুটি পাখি হত্যা করছেন: মেমরি পরিচালনা (বিদ্যমান বস্তুটি প্রকাশ করে) এবং পয়েন্টারটিকে শূন্য করার জন্য (যে কোনও শূন্য পয়েন্টারে কোনও বার্তা প্রেরণ শূন্য হবে)।
আশা করি এইটি কাজ করবে.
মনে রাখবেন viewDidUnloadএটি ভিউ কন্ট্রোলারে একটি পদ্ধতি, ভিউতে নয়। দৃশ্য এর dealloc পদ্ধতি যখন দৃশ্য unloads নামক পেতে হবে, কিন্তু দৃশ্য নিয়ামক এর dealloc পদ্ধতি পরে পর্যন্ত বলা যাবে না।
যদি আপনি একটি স্বল্প স্মৃতি সতর্কতা পেয়ে থাকেন এবং আপনার ভিউটি প্রদর্শিত না হচ্ছে, যা ব্যবহারকারীকে কোনও ছবি তোলার জন্য কোনও ইউআইআইমেজপিকার কনট্রোলার ব্যবহার করার সময় ঘটবে, আপনার ভিউ আনলোড করা হবে এবং তার পরে পুনরায় লোড করার প্রয়োজন হবে।
উপসংহার:
দেখুন কন্ট্রোলারদের একটি দেখার সম্পত্তি আছে। সাধারণত একটি নিব বা কোডের টুকরা এই ভিউতে অন্যান্য ভিউ যুক্ত করে। এটি প্রায়শই একটি ভিডিউডডিলোড পদ্ধতির অভ্যন্তরে ঘটে থাকে:
- (void)viewDidLoad {
[super viewDidLoad];
[self createManyViewsAndAddThemToSelfDotView];
}
তদতিরিক্ত, একটি নিব ফাইল একটি বোতাম তৈরি করতে পারে এবং এটিকে নিয়ামকের দৃশ্যে সংযোজন করতে পারে।
আইফোন ওএস ২.২-এ, যখন -DidReসেপ মেমরি ওয়ার্নিংটি সিস্টেম থেকে নেওয়া হয়েছিল, আপনাকে মেমরি মুক্ত করার জন্য কিছু ছেড়ে দিতে হয়েছিল। এটি যদি বোধগম্য হয় তবে আপনি পুরো ভিউ নিয়ন্ত্রকের দৃষ্টিভঙ্গি প্রকাশ করতে পারেন। বা এটিতে কেবল বড় মেমরি গ্রাসকারী সামগ্রী।
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
// Release anything that's not essential, such as cached data
}
এখন, নতুন ওএস 3.0.০-তে, একটি ভিউডিউডডাউনলোড পদ্ধতি রয়েছে, যা কম স্মৃতিশক্তির কারণে ভিউটি লোড করা হলে সিস্টেম থেকে ডাকা হবে (দয়া করে আমাকে সংশোধন করুন: কখন এটি ডাকা হয়?)
-ভিউডিডিউনলোডটি এমন সমস্ত অবজেক্টকে প্রকাশ করতে ব্যবহৃত হয় যা ভিউ কন্ট্রোলার নিজেই এবং দর্শন উভয়েরই মালিকানাধীন ছিল। কারণ: কোনও ভিউ কন্ট্রোলার যদি ভিউয়ের বাচ্চাদের রেফারেন্স ধরে রাখে, অর্থাত্ একটি বোতাম, তবে রেফারেন্স প্রাপ্ত শিশু দৃষ্টিভঙ্গি প্রকাশিত হবে না, কারণ তাদের ধরে রাখার গণনাটি = = ১ they স্মৃতি থেকে.
অ্যাপল আপনার ভিজেটিকে ছেড়ে দেওয়ার জন্য এখনই ড্রেডিজিপমেমরি ওয়ার্নিং বা ডেলোক ব্যবহার করবে Apple
আইওএস 6-এ, ইউআইভিউউকন্ট্রোলারের ভিউউইললোড এবং ভিউডিজইনলোড পদ্ধতিগুলি এখন হ্রাস করা হয়েছে। আপনি যদি ডেটা প্রকাশের জন্য এই পদ্ধতিগুলি ব্যবহার করে থাকেন, তবে পরিবর্তে didReসেপ্টমেমোরি ওয়ার্নিং পদ্ধতিটি ব্যবহার করুন। আপনি যদি এই পদ্ধতিটি ব্যবহার না করা হয় তবে নিয়ামকের দৃশ্যের সাথে রেফারেন্স প্রকাশ করতে এটি ব্যবহার করতে পারেন। আপনাকে পরীক্ষা করে দেখতে হবে যে এটি করার আগে ভিউটি কোনও উইন্ডোতে নেই।
যদি ভিউ কন্ট্রোলারটি নেভিগেশন কন্ট্রোলার স্ট্যাক থেকে পপ করা হয় এবং অন্য কোথাও ধরে না রাখা হয়, তবে এটি ডিএলোকটেড হবে এবং ভিউডিডনলোডের পরিবর্তে ডেলোক কল হবে। ডেলালোকের লোডভিউতে তৈরি হওয়া ভিউগুলি আপনার প্রকাশ করা উচিত, তবে ভেরিয়েবলগুলি শূন্য করতে সেট করা প্রয়োজন হয় না, কারণ ডেলোকের নামকরণের পরে ভেরিয়েবলগুলির আর অস্তিত্ব থাকবে না।