আইওএস ইউআইভিউউকন্ট্রোলার জীবনচক্রটি বুঝতে চাইছেন Looking


299

UIViewControllerজীবনচক্রটি পরিচালনা করার জন্য আপনি আমাকে সঠিক পদ্ধতিটি ব্যাখ্যা করতে পারেন ?

বিশেষ করে, আমি কিভাবে ব্যবহার করতে জানতে চাই Initialize, ViewDidLoad, ViewWillAppear, ViewDidAppear, ViewWillDisappear, ViewDidDisappear, ViewDidUnloadএবং Disposeএকটি জন্য মনো টাচ পদ্ধতি UIViewControllerবর্গ।


ওএসএক্স ভিউকন্ট্রোলার এবং উইন্ডো কনট্রোলারের জন্য কিছু তথ্য বা লিঙ্ক আছে? এটি শেয়ার করুন।
অনুপ বৈদ্য

উত্তর:


410

আপনি যখন ভিউ কন্ট্রোলারটি লোড / উপস্থাপন / লুকিয়ে রাখেন তখন এই সমস্ত আদেশগুলি উপযুক্ত সময়ে স্বয়ংক্রিয়ভাবে কল করা হয় are এটি লক্ষ করা গুরুত্বপূর্ণ যে এই পদ্ধতিগুলি নিজের সাথে সংযুক্ত UIViewControllerএবং না UIView। আপনি কেবল একটি ব্যবহার করে এই বৈশিষ্ট্যগুলির কোনও পাবেন না UIView

অ্যাপলের সাইটে এখানে দুর্দান্ত ডকুমেন্টেশন রয়েছে । যদিও সহজভাবে প্রবেশ করা:

  • ViewDidLoad- আপনি ক্লাস তৈরি করার সময় এবং xib থেকে লোড করা হয় led প্রাথমিক সেটআপ এবং এককালীন কেবল কাজের জন্য দুর্দান্ত।

  • ViewWillAppear- আপনার দৃশ্য প্রদর্শিত হওয়ার ঠিক আগে ডাকা হয়েছে, ক্ষেত্রগুলি লুকানোর জন্য / দেখানোর জন্য ভাল বা যে কোনও ক্রিয়াকলাপ যা আপনি দৃশ্যটি দৃশ্যমান হওয়ার আগে প্রতিবার ঘটতে চান তা ভাল। যেহেতু আপনি সম্ভবত দর্শনের মাঝে পিছনে যাচ্ছেন, আপনার দৃশ্যের পর্দায় প্রদর্শিত হওয়ার সময় এটি ডাকা হবে।

  • ViewDidAppear - ভিউটি প্রদর্শিত হওয়ার পরে ডাকা হয় - এনিমেশন শুরু করার দুর্দান্ত জায়গা বা কোনও এপিআই থেকে বাহ্যিক ডেটা লোড করা।

  • ViewWillDisappear/ DidDisappear- হিসাবে একই ধারণা ViewWillAppear/ ViewDidAppear

  • ViewDidUnload/ ViewDidDispose- অবজেক্টিভ-সি-তে, আপনি এখানে পরিষ্কার-পরিচ্ছন্নতা এবং স্টাফ রিলিজ করেন, তবে এটি স্বয়ংক্রিয়ভাবে পরিচালিত হয় তাই আপনাকে এখানে সত্যিই করার দরকার নেই।


86
এই পাঠ্যটি সামান্য বিভ্রান্তিকর, কারণ ভিউডিডডলডটি কেবলমাত্র এককালীন কাজের জন্য ব্যবহার করা উচিত নয়। কম মেমরির কারণে ভিউটি লোড করা এবং আবার লোড করা হলে এটি বেশ কয়েকবার কল করা যেতে পারে।
রিকি হেলগসন

4
আপনি যখন ভিউ কন্ট্রোলার তৈরি / আরম্ভ করবেন তখন ভিউডিডলড আসলে বলা হয় না। এটিকে প্রথমবার বলা হয় আপনি ভিউ কন্ট্রোলারের দৃশ্যের সাথে সম্পর্কিত কোনও দৃশ্যই করেন। এটিকে সাবউভিউ হিসাবে যুক্ত করা, ফ্রেম সেট করা ইত্যাদি ইত্যাদি কোনও নিব থেকে লোড করার সময় এটি অবশ্যই বলা হয়।
জেসন গ্র্যান্ডেলি

3
ভিউডিডঅ্যাপার - ভিউটি প্রদর্শিত হওয়ার পরে ডাকা হয় - এনিমেশন শুরু করার দুর্দান্ত জায়গা বা কোনও এপিআই থেকে বাহ্যিক ডেটা লোড করা। কেন ডেটা লোড করা ভাল জায়গা? ডিডলোড কেন দেখছেন না?
আন্তন চিকিন

1
লোডভিউ পদ্ধতি সম্পর্কে কী, যদি প্রথমবার যখন ডায়ালডোডের আগে কোনও নিব মেমরিতে লোড হয় বা ডাকা হয়।
iHulk

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

409

আপডেট: ভিউডিডঅনলড আইওএস 6 এ অবচয় করা হয়েছিল, সুতরাং সেই অনুযায়ী উত্তরটি আপডেট করুন।

ইউআইভিউউকন্ট্রোলার জীবনচক্রটি এখানে ডায়াগ্রামযুক্ত:

একটি দৃশ্যের নিয়ামকের জীবনচক্র, ডায়াগ্রামযুক্ত

জামারিন নেটিভ / মনো টাচ ব্যবহার করার সুবিধাটি হ'ল এটি নেটিভ এপিআইগুলি ব্যবহার করে এবং তাই এটি অ্যাপল এর ডকুমেন্টেশনে যেমন দেখতে পাবেন তেমনই ভিউকন্ট্রোলার জীবনচক্র অনুসরণ করে।


17
এই ফ্লোচার্টটিতে ভিউউইললআউটসুবভিউস এবং ভিউডিডলয়আউটসুভিউগুলি কোথায় যায়?
ম্যাক্স_পাওয়ার 89

7
এই চিত্রটি সঠিক নয়। : viewDidUnload iOS6 যেহেতু অবচিত stackoverflow.com/questions/12509102/...
occulus

2
এই প্রকৃতপক্ষে সহজভাবে হয় ভুল । বছর কেটে যাওয়ার সাথে সাথে এসও সম্পর্কে সহজ উত্তর দেওয়ার আরও একটি উদাহরণ Another কম্পিউটিং অত্যন্ত অ স্থির।
ফ্যাটি

186

এটি সর্বশেষতম আইওএস সংস্করণগুলির জন্য ( এক্সকোড 9.3, সুইফট 4.1 সহ সংশোধিত )। নীচে সমস্ত পর্যায় যা UIViewControllerসম্পূর্ণরূপে জীবনচক্র তৈরি করে ।

  • loadView()

  • loadViewIfNeeded()

  • viewDidLoad()

  • viewWillAppear(_ animated: Bool)

  • viewWillLayoutSubviews()

  • viewDidLayoutSubviews()

  • viewDidAppear(_ animated: Bool)

  • viewWillDisappear(_ animated: Bool)

  • viewDidDisappear(_ animated: Bool)

আমাকে এই সমস্ত পর্যায়টি ব্যাখ্যা করতে দিন।

1। loadView

এই ইভেন্টটি নিয়ন্ত্রণকারী পরিচালনা করে এমন দৃশ্য তৈরি করে / লোড করে। এটি কোনও সম্পর্কিত নিব ফাইল থেকে লোড করতে পারে বা UIViewনাল খুঁজে পাওয়া গেলে একটি খালি । কোডে আপনার মতামত প্রোগ্রামক্রমে তৈরি করার জন্য এটি একটি ভাল জায়গা করে তোলে।

এটি হ'ল সাব-ক্লাসগুলি তাদের কাস্টম ভিউ হায়ারার্কি তৈরি করতে হবে যদি তারা কোনও নিব ব্যবহার না করে। কখনও সরাসরি ডাকা উচিত নয়। কেবলমাত্র যখন আপনি প্রোগ্রামটিমেটিকভাবে ভিউ তৈরি করেন এবং viewসম্পত্তিতে রুট ভিউ বরাদ্দ করেন তখনই এই পদ্ধতিটি ওভাররাইড করুন যখন আপনি লোড ভিউর ওভাররাইড করবেন তখন সুপার পদ্ধতিটিকে কল করবেন না

2। loadViewIfNeeded

যদি বর্তমানের দৃশ্যটি viewControllerএখনও সেট না করা থাকে তবে এই পদ্ধতিটি ভিউটি লোড করবে তবে মনে রাখবেন, এটি কেবল আইওএস> = 9.0 এ উপলব্ধ। সুতরাং আপনি যদি আইওএস <9.0 সমর্থন করেন তবে ছবিতে আসার আশা করবেন না।

যদি ইতিমধ্যে সেট না করা থাকে তবে দৃশ্য নিয়ন্ত্রণকারীর ভিউ লোড করে।

3। viewDidLoad

viewDidLoadইভেন্টটি কেবল তখনই বলা হয় যখন দৃশ্যটি তৈরি করা হয় এবং মেমরিতে লোড করা হয় তবে দেখার জন্য সীমাটি এখনও সংজ্ঞায়িত করা হয় না। ভিউ কন্ট্রোলার ব্যবহার করতে যাওয়া অবজেক্টগুলির সূচনা করার জন্য এটি একটি ভাল জায়গা।

ভিউ লোড হওয়ার পরে ফোন করা হয়েছে। কোডে তৈরি কন্ট্রোলার দর্শনার্থীদের জন্য, এটি -উড-ভিউয়ের পরে। কোনও নিব থেকে সংরক্ষণাগারভুক্ত দর্শন নিয়ন্ত্রকদের জন্য, ভিউ সেট হওয়ার পরে এটি।

4। viewWillAppear

এই ইভেন্টটি viewControllerযখনই স্ক্রিনে ভিউ প্রদর্শিত হবে তখন অবহিত করে । এই পদক্ষেপে ভিউটির সীমানা রয়েছে যা সংজ্ঞায়িত হয় তবে অভিযোজনটি সেট করা হয় না।

কলটি যখন দৃশ্যটি দৃশ্যমান হবে। ডিফল্ট কিছুই করে না।

5। viewWillLayoutSubviews

এটি লাইফসাইকেলের প্রথম পদক্ষেপ যেখানে সীমা চূড়ান্ত করা হয়। যদি আপনি সীমাবদ্ধতা বা অটো লেআউট ব্যবহার না করেন তবে আপনি সম্ভবত এখানে সংক্ষিপ্তসারগুলি আপডেট করতে চান। এটি কেবল আইওএস> = 5.0 এ উপলব্ধ। সুতরাং আপনি যদি আইওএস <5.0 সমর্থন করেন তবে ছবিতে আসার আশা করবেন না।

ভিউ কন্ট্রোলারের ভিউ'র লেআউটসুভিউস পদ্ধতিটি চালিত হওয়ার ঠিক আগে কল করা হয়েছিল। সাবক্লাসগুলি প্রয়োজনীয় হিসাবে প্রয়োগ করতে পারে। ডিফল্ট হ'ল ন্যাপ।

6। viewDidLayoutSubviews

এই ইভেন্টটি ভিউ কন্ট্রোলারকে জানিয়ে দেয় যে সাবভিউগুলি সেটআপ হয়েছে। সেগুলি সেট আপ হওয়ার পরে সাবউভিউগুলিতে কোনও পরিবর্তন করার জন্য এটি ভাল জায়গা। এটি কেবল আইওএস> = 5.0 এ উপলব্ধ। সুতরাং আপনি যদি আইওএস <5.0 সমর্থন করেন তবে ছবিতে আসার আশা করবেন না।

দেখার জন্য নিয়ন্ত্রকের ভিউ'র লেআউটসুভিউস পদ্ধতিটি চালু হওয়ার ঠিক পরে কল করা হয়েছে। সাবক্লাসগুলি প্রয়োজনীয় হিসাবে প্রয়োগ করতে পারে। ডিফল্ট হ'ল ন্যাপ।

7। viewDidAppear

viewDidAppearদৃশ্য পর ঘটনা দাবানল পর্দায় উপস্থাপন করা হয়। যা ব্যাকএন্ড পরিষেবা বা ডাটাবেস থেকে ডেটা পাওয়ার জন্য এটি ভাল জায়গা করে তোলে।

দৃশ্যটি পুরোপুরি স্ক্রিনে স্থানান্তরিত হওয়ার পরে কল করা হয়। ডিফল্ট কিছুই করে না

8। viewWillDisappear

viewWillDisappearঘটনা দাবানল উপস্থাপন দৃশ্যে যখন viewControllerসম্পর্কে, অন্তর্হিত হওয়া বরখাস্ত, কভার বা লুকিয়ে রাখবেন অন্যান্য পিছনে হয় viewController। এটি একটি ভাল জায়গা যেখানে আপনি আপনার নেটওয়ার্ক কলগুলিকে সীমাবদ্ধ করতে পারবেন, টাইমারকে অকার্যকর করতে পারবেন বা অবধারিত অবজেক্টগুলি প্রকাশ করতে পারবেন viewController

দৃশ্যটি বরখাস্ত, আচ্ছাদিত বা অন্যথায় লুকানো থাকলে কল করা হয়।

9। viewDidDisappear

এটি লাইফসাইকেলের শেষ পদক্ষেপ যা উপস্থাপকের দৃষ্টিভঙ্গি viewControllerঅদৃশ্য হয়ে যায়, বরখাস্ত করা হয়, আবৃত করা হয় বা লুকানো থাকে তার পরে যে কেউ এই ইভেন্টটিকে আগুন হিসাবে চিহ্নিত করতে পারে ।

দৃশ্যটি বরখাস্ত হওয়ার পরে, আচ্ছাদিত বা অন্যথায় লুকানো থাকার পরে কল করা হয়। ডিফল্ট কিছুই করে না

এখন অনুযায়ী অ্যাপল যখন আপনি এই পদ্ধতি আপনাকে কল করার মনে রাখা উচিত বাস্তবায়ন করছি superনির্দিষ্ট পদ্ধতি বাস্তবায়ন।

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

আশা করি এটি সাহায্য করেছে। ধন্যবাদ।

আপডেট - @ থমাসডাব্লু মন্তব্যের অভ্যন্তরে ইঙ্গিত করে viewWillLayoutSubviewsএবং viewDidLayoutSubviewsঅন্যান্য সময়ে যখন প্রধান ভিউর সংক্ষিপ্তসারগুলি লোড করা হয় তখনও ডাকা হবে, উদাহরণস্বরূপ যখন কোনও সারণী দর্শন বা সংগ্রহ দর্শনের ঘরগুলি লোড হয়।

আপডেট - @ মারিয়া মন্তব্যের ভিতরে উল্লেখ করার সাথে সাথে বর্ণনাটি loadViewআপডেট করা হয়েছিল


6
viewWillLayoutSubviewsএবং viewDidLayoutSubviewsঅন্যান্য সময়ে মুখ্য দৃশ্যের সাবভিউ লোড করা হয় এমন সময়ে ডাকা হবে, উদাহরণস্বরূপ যখন কোনও সারণী দর্শন বা সংগ্রহ দর্শনটির ঘরগুলি লোড হয়।
থমাসডাব্লু

এই উত্তরে কিছুটা বিভ্রান্তিমূলক রয়েছে: লোডভিউ () সর্বদা বলা হয়, আইবিতে তৈরি কন্ট্রোলারের জন্য দেখার সময় এটিকে ওভাররাইড করা উচিত নয়।
মারিয়া 6

@ মারিয়া দয়া করে এগিয়ে যান এবং উত্তরটি সম্পাদনা করুন যদি আপনি মনে করেন এটির উন্নতি করা যায়। ধন্যবাদ।
অন ​​কমপ্লিট

ডিফল্ট কিছুই ভুল হয় না viewWillAppear viewDidAppear viewDidDisappear। আপনাকে অবশ্যই এক পর্যায়ে সুপার কল করতে হবে।
মিক

47

আইওএস 10,11 (সুইফট 3.1, সুইফট 4.0)

মতে UIViewControllerমধ্যে UIKitবিকাশকারী,

1. লোডভিউ ()

এটি হ'ল সাব-ক্লাসগুলি তাদের কাস্টম ভিউ হায়ারার্কি তৈরি করতে হবে যদি তারা কোনও নিব ব্যবহার না করে । কখনও সরাসরি ডাকা উচিত নয়।

2. লোডভিউআইফনিড ()

যদি ইতিমধ্যে সেট না করা থাকে তবে দৃশ্য নিয়ন্ত্রণকারীর ভিউ লোড করে।

৩. ভিডডিডলড ()

ভিউ লোড হওয়ার পরে ফোন করা হয়েছে। কোডে তৈরি কন্ট্রোলার দর্শনার্থীদের জন্য, এটি -উড-ভিউয়ের পরে। কোনও নিব থেকে সংরক্ষণাগারভুক্ত দর্শন নিয়ন্ত্রকদের জন্য, ভিউ সেট হওয়ার পরে এটি।

৪. ভিউউইল অ্যাপয়ার (_ অ্যানিমেটেড: বুল)

কলটি যখন দৃশ্যটি দৃশ্যমান হবে। ডিফল্ট কিছুই করে না

৫.উইউইলএলআউটসুবউভিউস ()

ভিউ কন্ট্রোলারের ভিউ'র লেআউটসুভিউস পদ্ধতিটি চালিত হওয়ার ঠিক আগে কল করা হয়েছিল। সাবক্লাসগুলি প্রয়োজনীয় হিসাবে প্রয়োগ করতে পারে। ডিফল্ট কিছুই করে না।

View. দ্যডলিআউটআউটভিউ ()

দেখার জন্য নিয়ন্ত্রকের ভিউ'র লেআউটসুভিউস পদ্ধতিটি চালু হওয়ার ঠিক পরে কল করা হয়েছে। সাবক্লাসগুলি প্রয়োজনীয় হিসাবে প্রয়োগ করতে পারে। ডিফল্ট কিছুই করে না।

View. ভিউডিডঅ্যাপার (_ অ্যানিমেটেড: বুল)

দৃশ্যটি পুরোপুরি স্ক্রিনে স্থানান্তরিত হওয়ার পরে কল করা হয়। ডিফল্ট কিছুই করে না

৮. ভিউউইলডিস্পিয়ার (_ অ্যানিমেটেড: বুল)

দৃশ্যটি বরখাস্ত, আচ্ছাদিত বা অন্যথায় লুকানো থাকলে কল করা হয়। ডিফল্ট কিছুই করে না

9. দেখুনডিডিস্পিয়ার (_ অ্যানিমেটেড: বুল )

দৃশ্যটি বরখাস্ত হওয়ার পরে, আচ্ছাদিত বা অন্যথায় লুকানো থাকার পরে কল করা হয়। ডিফল্ট কিছুই করে না

১০. ভিউউইল ট্রানসিশন (আকারে: সিজি সাইজ, সমন্বয়কারীর সাথে: ইউআইভিউউকন্ট্রোলার ট্রান্সসিশনকর্ডিনেটর)

দৃশ্যটি ট্রানজিশন করার সময় বলা হয়।

১১. উইলমোভ (টু প্যারেন্টভিউ কনট্রোলার পিতা: ইউআইভিউকন্ট্রোলার?)

১২. কি মোভ (টু পেরেন্টভিউ কনট্রোলার পিতা: ইউআইভিউকন্ট্রোলার?)

শিশু নিয়ন্ত্রণকারীদের মধ্যে রূপান্তরকালে কনটেইনার সাবক্লাসগুলি কল করার জন্য এই দুটি পদ্ধতি সর্বজনীন। যদি সেগুলি ওভাররাইড হয় তবে ওভাররাইডগুলি সুপারকে কল করা নিশ্চিত করে।

যখন কোনও শিশুকে তার পিতামাতা থেকে সরানো হচ্ছে তখন এই দুটি পদ্ধতিতে পিতামাতার যুক্তি শূন্য হয়; অন্যথায় এটি নতুন প্যারেন্ট ভিউ কন্ট্রোলারের সমান।

13. কি করেছেনমিজারি ওয়ার্নিং ()

অভিভাবক অ্যাপ্লিকেশনটি মেমরির সতর্কতা পেলে কল করা হয়। আইওএস 6.0 এ এটি আর ডিফল্টরূপে দৃশ্যটি সাফ করবে না।


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

nibনীচে উল্লিখিত হিসাবে কি loadView?
পেট্রাস থেরন

2
নিবন্ধন করুন এসও প্রশ্নগুলি সদৃশ বা সুরক্ষিত হিসাবে চিহ্নিত করে, আমি মনে করি উত্তরগুলি পুরানো বা অপ্রচলিত
rmp251

উপরের পয়েন্ট 5 টি ভুল। viewWillLayoutSubviews()ভিউকন্ট্রোলারের ভিউ অবজেক্টটি তার layoutSubviews()পদ্ধতিটি আহ্বানের আগে ডাকা হবে
উইলিয়ামুকোহ

28

আইওএস 6 এবং পরবর্তী হিসাবে। নতুন চিত্রটি নিম্নরূপ:

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


1
সেই দৃশ্যটিকে "এ" বলুন। "A" অদৃশ্য হয়ে যাওয়ার পরে প্রদর্শিত দ্বিতীয় দর্শনটি বিবেচনা করুন। "A.viewDidDisappear" এর আগে বা পরে "B.viewWillappear" হয়? এবং এমন কোনও পরিস্থিতি রয়েছে যেখানে এই দুটি ক্রমের ক্রম পরিবর্তন হয়?
টুলমেকারস্টেভ

নতুন ভিউ (বি) উইলএপয়ারের মতো মনে হয় নিখোঁজ হওয়ার আগে কল করা হবে। দ্বিতীয় প্রশ্নের জন্য। এটি খতিয়ে দেখার জন্য কিছু সময় প্রয়োজন।
সাদ

21

আসুন এমন পদ্ধতিগুলিতে মনোনিবেশ করি যা ইউআইভিউউকন্ট্রোলারের জীবনচক্রের জন্য দায়ী :

  • ক্রিয়েশন:

    - (void)init

    - (void)initWithNibName:

  • সৃষ্টি দেখুন:

    - (BOOL)isViewLoaded

    - (void)loadView

    - (void)viewDidLoad

    - (UIView *)initWithFrame:(CGRect)frame

    - (UIView *)initWithCoder:(NSCoder *)coder

  • দর্শনীয় অবস্থার পরিবর্তনের হ্যান্ডলিং:

    - (void)viewDidLoad

    - (void)viewWillAppear:(BOOL)animated

    - (void)viewDidAppear:(BOOL)animated

    - (void)viewWillDisappear:(BOOL)animated

    - (void)viewDidDisappear:(BOOL)animated

    - (void)viewDidUnload

  • মেমরি সতর্কতা হ্যান্ডলিং:

    - (void)didReceiveMemoryWarning

  • deallocation

    - (void)viewDidUnload

    - (void)dealloc

ইউআইভিউকন্ট্রোলারের জীবনচক্রের ডায়াগ্রাম

আরও তথ্যের জন্য দয়া করে ইউআইভিউউকন্ট্রোলার শ্রেণি রেফারেন্সটি একবার দেখুন


19

পদ্ধতিগুলি viewWillLayoutSubviewsএবং viewDidLayoutSubviewsচিত্রগুলিতে উল্লিখিত হয়নি, তবে এগুলিকে viewWillAppearএবং এর মধ্যে বলা হয় viewDidAppear। তাদের একাধিকবার বলা যেতে পারে।


মূল দৃশ্যের সংক্ষিপ্তসারগুলি লোড হওয়ার সময় এগুলিও ডাকা হবে, উদাহরণস্বরূপ যখন কোনও সারণী দর্শন বা সংগ্রহ দর্শনের ঘরগুলি লোড করা হয়।
থমাসডাব্লু

16

প্রি-আইওএস for এর জন্য হায়দারের উত্তর সঠিক However তবে আইওএস 6 হিসাবে ভিউডিডনলোড এবং ভিউউইলউনলোড কখনই ডাকা হয় না। ডক্স রাষ্ট্র: "দেখেছে আর কম মেমরি অবস্থার অধীনে এবং তাই এই পদ্ধতি কখনও বলা হয় পার্জ করছি।"


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

1
লিঙ্কটি কাজ করে না ... তাহলে কম মেমরির অধীনে ওএস কী করবে?
পুত্র

তাদের ডিস্কে বাঁচায়?
ইয়ান ওয়ারবার্টন

16

এখানে প্রচুর পুরানো এবং অসম্পূর্ণ তথ্য রয়েছে। জন্য আইওএস 6 এবং নতুন শুধুমাত্র:

  1. loadView[এক]
  2. viewDidLoad[এক]
  3. viewWillAppear
  4. viewWillLayoutSubviews প্রথমবারের সীমাটি চূড়ান্ত হয়
  5. viewDidLayoutSubviews
  6. viewDidAppear
  7. * viewWillLayoutSubviews[B]
  8. * viewDidLayoutSubviews[B]

পাদটিকা:

(ক) - আপনি যদি নিজের সময়টি ম্যানুয়ালি নিষ্ক্রিয় করেন didReceiveMemoryWarning, loadViewএবং viewDidLoadআবার কল করা হবে। এটি হ'ল ডিফল্টরূপে loadViewএবং viewDidLoadশুধুমাত্র একবার নিয়ন্ত্রক দৃষ্টান্ত অনুসারে কল করা হয়।

(খ) অতিরিক্ত 0 বা তার বেশি বার বলা যেতে পারে ।


1
viewWillLayoutSubviewsএবং viewDidLayoutSubviewsঅন্যান্য সময়ে মুখ্য দৃশ্যের সাবভিউ লোড করা হয় এমন সময়ে ডাকা হবে, উদাহরণস্বরূপ যখন কোনও সারণী দর্শন বা সংগ্রহ দর্শনটির ঘরগুলি লোড হয়।
থমাসডাব্লু

11

সরকারী দস্তাবেজে রাজ্য স্থানান্তরের ব্যাখ্যা: https://developer.apple.com/library/ios/docamentation/uikit/references/UIViewController_Class/index.html

এই চিত্রটি বিভিন্ন দর্শন 'উইল' এবং 'ডিড' কলব্যাক পদ্ধতিগুলির মধ্যে বৈধ রাষ্ট্রীয় রূপান্তরগুলি দেখায়

বৈধ রাষ্ট্র পরিবর্তনসমূহ:


থেকে নেওয়া হয়েছে: https://developer.apple.com/library/ios/docamentation/uikit/references/UIViewController_Class/Art/UIViewController Class References_2x.png


0

অনুযায়ী অ্যাপলের ডক - স্টার্ট iOS অ্যাপ্লিকেশান (SWIFT) ডেভেলপিং - ওয়ার্ক দেখুন কন্ট্রোলার দিয়ে - বুঝুন দেখুন কন্ট্রোলার লাইফ সাইকল

viewDidLoad()- যখন স্ট্রোলবোর্ড থেকে ভিউ কন্ট্রোলারের কনটেন্ট ভিউ (তার ভিউয়ের স্তরবিন্যাসের শীর্ষ) তৈরি করা হয় এবং লোড করা হয় alled … আপনার ভিউ কন্ট্রোলারের জন্য প্রয়োজনীয় কোনও অতিরিক্ত সেটআপ সম্পাদন করতে এই পদ্ধতিটি ব্যবহার করুন।

viewWillAppear()Control অ্যাপ্লিকেশনটির ভিউ হায়ারার্কিতে কন্ট্রোলারের কন্টেন্ট ভিউ যুক্ত হওয়ার ঠিক আগে বলা হয়েছিল। সামগ্রীটি অনস্ক্রিন উপস্থাপিত করার আগে যে কোনও অপারেশন ঘটতে হবে তা ট্রিগার করতে এই পদ্ধতিটি ব্যবহার করুন

viewDidAppear()Control অ্যাপ্লিকেশনটির ভিউ হায়ারার্কিতে কন্ট্রোলারের কন্টেন্ট ভিউ যুক্ত হওয়ার ঠিক পরে ডেকে আনা হয়েছে। দৃশ্যটি অনস্ক্রিনের সাথে সাথে উপস্থাপিত হওয়ার সাথে সাথে ঘটতে হবে এমন কোনও ক্রিয়াকলাপ ট্রিগার করতে এই পদ্ধতিটি ব্যবহার করুন যেমন ডেটা আনতে বা অ্যানিমেশন দেখানো।

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

viewDidDisappear()Control অ্যাপ্লিকেশনটির ভিউ হায়ারার্কি থেকে দেখার জন্য নিয়ামকের কনটেন্ট ভিউ সরিয়ে ফেলার ঠিক পরে কল করা হয়েছে। অতিরিক্ত টিয়ারডাউন ক্রিয়াকলাপ সম্পাদন করতে এই পদ্ধতিটি ব্যবহার করুন।

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