আমি একটি আইফোন অ্যাপ্লিকেশন করছি, এবং নির্দিষ্ট ব্যবহারকারীর ক্রিয়াকলাপের কারণে আমার এটিকে প্রস্থান করতে বাধ্য করতে হবে। অ্যাপ্লিকেশন বরাদ্দ হওয়া মেমরি পরিষ্কার করার পরে, অ্যাপ্লিকেশনটি বন্ধ করার জন্য কল করার উপযুক্ত পদ্ধতিটি কী?
আমি একটি আইফোন অ্যাপ্লিকেশন করছি, এবং নির্দিষ্ট ব্যবহারকারীর ক্রিয়াকলাপের কারণে আমার এটিকে প্রস্থান করতে বাধ্য করতে হবে। অ্যাপ্লিকেশন বরাদ্দ হওয়া মেমরি পরিষ্কার করার পরে, অ্যাপ্লিকেশনটি বন্ধ করার জন্য কল করার উপযুক্ত পদ্ধতিটি কী?
উত্তর:
আপনি চেষ্টা করেছেন exit(0)
?
বিকল্পভাবে, [[NSThread mainThread] exit]
যদিও আমি চেষ্টা করেছি না যে এটি আরও উপযুক্ত সমাধান বলে মনে হচ্ছে।
আইফোনে কোনও অ্যাপ্লিকেশন ছাড়ার কোনও ধারণা নেই। অ্যাপ্লিকেশনটি ছেড়ে দেওয়ার একমাত্র ক্রিয়া হ'ল ফোনের হোম বোতামটি স্পর্শ করা এবং এটি বিকাশকারীদের অ্যাক্সেসের কিছু নয়।
অ্যাপলের মতে, আপনার অ্যাপ্লিকেশনটি নিজে থেকে শেষ করা উচিত নয়। যেহেতু ব্যবহারকারী হোম বোতামটিতে হিট করেনি, তাই হোম স্ক্রিনে কোনও প্রত্যাবর্তন ব্যবহারকারীকে এমন ধারণা দেয় যে আপনার অ্যাপটি ক্র্যাশ হয়ে গেছে। এটি বিভ্রান্তিকর, মানহীন আচরণ এবং এড়ানো উচিত।
প্রস্থান (0) ক্র্যাশ হিসাবে কোনও ব্যবহারকারীর কাছে উপস্থিত হয়, সুতরাং ব্যবহারকারীর কাছে একটি নিশ্চিতকরণ বার্তা দেখান। নিশ্চিতকরণ স্থগিতের পরে (হোম বোতামটি প্রেসক্রমেটিকভাবে চাপুন) এবং অ্যাপ্লিকেশন অ্যানিমেশনের সাথে ব্যাকগ্রাউন্ডে যাওয়ার পরে 2 সেকেন্ড অপেক্ষা করুন তারপরে ব্যবহারকারীর দৃশ্যের পিছনে প্রস্থান করুন
-(IBAction)doExit
{
//show confirmation message to user
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Confirmation"
message:@"Do you want to exit?"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
[alert show];
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex != 0) // 0 == the cancel button
{
//home button press programmatically
UIApplication *app = [UIApplication sharedApplication];
[app performSelector:@selector(suspend)];
//wait 2 seconds while app is going background
[NSThread sleepForTimeInterval:2.0];
//exit app when app is in background
exit(0);
}
}
exit(0)
কোন ব্যাপার না। পয়েন্টটি হ'ল আপনার অ্যাপ্লিকেশনটির "ছাড়ার আচরণ" রয়েছে। খুব গুরুত্বপূর্ণ তৃতীয় পক্ষগুলি দ্বারা তৈরি করা কয়েকটি অ্যাপ্লিকেশন ব্যতীত অ্যাপস্টোরগুলিতে নিজেই ছাড়ার আচরণ নিষিদ্ধ। এছাড়াও, হোম বোতামের আচরণ অনুকরণ করাও প্রত্যাখ্যানযোগ্য।
প্রশ্নোত্তর এখানে দেখুন: https://developer.apple.com/library/content/qa/qa1561/_index.html
প্রশ্ন: আমি কীভাবে প্রোগ্রামের মাধ্যমে আমার আইওএস অ্যাপ্লিকেশনটি ছেড়ে দেব?
আইওএস অ্যাপ্লিকেশনটি করুণভাবে শেষ করার জন্য কোনও এপিআই সরবরাহ করা হয়নি।
আইওএস-এ, ব্যবহারকারী অ্যাপ্লিকেশনগুলি বন্ধ করতে হোম বোতাম টিপেন। আপনার অ্যাপ্লিকেশনটিতে এমন কোনও শর্ত থাকতে হবে যাতে এটি তার উদ্দেশ্যযুক্ত ফাংশনটি সরবরাহ করতে পারে না, প্রস্তাবিত পদ্ধতির ব্যবহারকারীর জন্য একটি সতর্কতা প্রদর্শন করা উচিত যা সমস্যার প্রকৃতি এবং ব্যবহারকারী গ্রহণ করতে পারে এমন সম্ভাব্য পদক্ষেপগুলি নির্দেশ করে - ওয়াইফাই চালু করা, অবস্থান পরিষেবাদি সক্ষম করা ইত্যাদি etc. ব্যবহারকারীকে নিজস্ব বিবেচনার ভিত্তিতে অ্যাপ্লিকেশনটি শেষ করতে অনুমতি দিন।
সতর্কতা:
exit
ফাংশনটি কল করবেন না । অ্যাপ্লিকেশন কলিংexit
ব্যবহারকারীর কাছে ক্র্যাশ হওয়ার জন্য প্রদর্শিত হবে, বরং গ্রেফসেস টার্মিনেশন এবং হোম স্ক্রিনে অ্যানিমেট করার পরিবর্তে rasঅতিরিক্তভাবে, ডেটা সংরক্ষণ করা যায় না, কারণ
-applicationWillTerminate:
এবংUIApplicationDelegate
যদি আপনি প্রস্থানকে কল করেন তবে অনুরূপ পদ্ধতিগুলি চাওয়া হবে না।যদি বিকাশ বা পরীক্ষার সময় আপনার অ্যাপ্লিকেশনটি সমাপ্ত করা প্রয়োজন হয়, তবে
abort
ফাংশন বাassert
ম্যাক্রো বাঞ্ছনীয়
এটি প্রোগ্রামটি ছাড়ার কোনও উপায় নয়, মানুষকে ছাড়তে বাধ্য করার উপায়।
UIAlertView *anAlert = [[UIAlertView alloc] initWithTitle:@"Hit Home Button to Exit" message:@"Tell em why they're quiting" delegate:self cancelButtonTitle:nil otherButtonTitles:nil];
[anAlert show];
আপনার তথ্য.পুলিস্টে যান এবং "অ্যাপ্লিকেশনটি পটভূমিতে চলে না" কীটি পরীক্ষা করুন। এবার যখন ব্যবহারকারী হোম বোতামটি ক্লিক করেন, অ্যাপ্লিকেশনটি পুরোপুরি বাইরে চলে আসে।
যোগ UIApplicationExitsOnSuspend
উপর সম্পত্তি application-info.plist
থেকে true
।
কিছু পরীক্ষার পরে, আমি নিম্নলিখিতটি বলতে পারি:
[UIApplication sharedApplication]
অ্যাপ্লিকেশনটিকে ক্র্যাশ হওয়ার মতো দেখায় কারণ এটি করার - (void)applicationWillTerminate:(UIApplication *)application
আগে এটি কল করবে ;exit(0);
ব্যবহারটি অ্যাপ্লিকেশনটিও বন্ধ করে দেবে, তবে এটি "স্বাভাবিক" দেখায় (স্প্রিংবোর্ডের আইকনগুলি প্রত্যাশার মতো দেখাবে, জুম আউট প্রভাবের সাথে), তবে এটি - (void)applicationWillTerminate:(UIApplication *)application
ডেলিগেট পদ্ধতিটিকে কল করবে না ।আমার উপদেশ:
- (void)applicationWillTerminate:(UIApplication *)application
প্রতিনিধিটিকে ম্যানুয়ালি কল করুন ।exit(0);
।আপনার অ্যাপ্লিকেশনডেলিগেট ব্যবহারকারী দ্বারা ইচ্ছাকৃত ছাড়ার বিষয়ে বিজ্ঞপ্তি পেয়েছে:
- (void)applicationWillResignActive:(UIApplication *)application {
আমি যখন এই বিজ্ঞপ্তিটি পেয়েছি তখন আমি কেবল কল করি
exit(0);
যা সব কাজ করে। এবং সর্বোত্তম জিনিসটি হ'ল এটি ছাড়ার প্রবণতা, যার কারণেই এটি সেখানে ডাকতে সমস্যা হওয়া উচিত নয়।
আমার অডিও-অ্যাপে সংগীত বাজানোর সময় লোকেরা তাদের ডিভাইস সিঙ্ক করার পরে অ্যাপটি ত্যাগ করা দরকার ছিল। সিঙ্কিংটি শেষ হওয়ার সাথে সাথে আমি একটি বিজ্ঞপ্তি পাই। তবে ঠিক তার পরে অ্যাপ্লিকেশনটি ছেড়ে দেওয়া আসলে ক্র্যাশের মতো দেখায়।
সুতরাং এর পরিবর্তে আমি পরবর্তী পটভূমি ক্রিয়াকলাপটিতে অ্যাপ্লিকেশনটি প্রস্থান করতে সত্যিই একটি পতাকা সেট করেছি। সিঙ্কের পরে অ্যাপটি রিফ্রেশ করার জন্য যা ঠিক আছে।
আমার অ্যাপটি সম্প্রতি প্রত্যাখ্যান করা হয়েছে খ্রিস্টাব্দে আমি একটি অননুমোদিত পদ্ধতি ব্যবহার করেছি। শাব্দিক অনুবাদ
"দুর্ভাগ্যক্রমে এটি অ্যাপ স্টোরটিতে যুক্ত করা যায় না কারণ এটি একটি প্রাইভেট এপিআই ব্যবহার করছে। আইফোন বিকাশকারী প্রোগ্রাম লাইসেন্স চুক্তি বিভাগের ৩.৩.১ তে বর্ণিত নন-পাবলিক এপিআই ব্যবহার নিষিদ্ধ:
"৩.৩.১ অ্যাপ্লিকেশনগুলি কেবল অ্যাপল দ্বারা নির্ধারিত পদ্ধতিতে ডকুমেন্টেড এপিআই ব্যবহার করতে পারে এবং কোনও প্রাইভেট এপিআই ব্যবহার করতে বা কল করতে হবে না।"
আপনার অ্যাপ্লিকেশনটিতে অন্তর্ভুক্ত থাকা অ-সর্বজনীন এপিআই হ'ল সমাপ্তি উইথসাক্সেস "
অ্যাপল বলে:
"সতর্কতা: প্রস্থান ফাংশনটি কল করবেন না Applications অ্যাপ্লিকেশন কলিং প্রস্থানটি ব্যবহারকারীর কাছে ক্রেস্ট হয়ে উঠবে, করুণ সমাপ্তি সম্পাদন করার পরিবর্তে এবং হোম স্ক্রিনে অ্যানিমেট করার পরিবর্তে।"
আমি মনে করি এটি খারাপ ধারণা is যদি ব্যবহারকারী একটি প্রস্থান বোতামটি ট্যাপ করেন এবং এমন কোনও বার্তা উপস্থিত হয় যাতে এর মতো কিছু বলা হয়: "অ্যাপ্লিকেশনটি এখন প্রস্থান করবে" ", এটি ক্র্যাশ হয়ে যায় বলে মনে হয় না। অ্যাপল একটি অ্যাপ্লিকেশন ছাড়ার জন্য একটি বৈধ উপায় প্রদান করা উচিত (প্রস্থান (0) নয়)
এটি একটি ভাল উত্তর পেয়েছে তবে কিছুটা প্রসারিত করার সিদ্ধান্ত নিয়েছে:
অ্যাপলের আইওএস হিউম্যান ইন্টারফেস গাইডলাইনগুলি ভালভাবে না পড়ে আপনি অ্যাপ্লিকেশনটিতে অ্যাপ্লিকেশন গ্রহণ করতে পারবেন না। (তাদের বিরুদ্ধে কিছু করার জন্য তারা আপনাকে প্রত্যাখ্যান করার অধিকার বজায় রেখেছে ) বিভাগ "প্রোগ্রামিমেটিকালি ছেড়ে দেবেন না" বিভাগটি " http://developer.apple.com/library/ios/#DOCUMENTATION/UserExperience/Concepual/MobileHIG/UEBestPractices/UEBestPractices " । এই ক্ষেত্রে আপনার কীভাবে আচরণ করা উচিত এইচটিএমএল একটি সঠিক নির্দেশিকা guid
আপনার যদি কখনও অ্যাপল প্ল্যাটফর্মের সমস্যা হয় তবে আপনি সহজেই এর সমাধান খুঁজে পেতে পারেন না, এইচআইজি-র পরামর্শ নিন। এটি সম্ভবত সম্ভব অ্যাপল চায় না যে আপনি এটি করেন এবং তারা সাধারণত (আমি অ্যাপল নই তাই আমি সবসময় গ্যারান্টি দিতে পারি না) তাদের ডকুমেন্টেশনে এটি বলে say
এইচএম, আপনার অ্যাপ্লিকেশনটির জন্য ইন্টারনেট সংযোগের প্রয়োজন থাকলে, আপনাকে অ্যাপ্লিকেশনটি 'ছাড়তে' হতে পারে। আপনি একটি সতর্কতা প্রদর্শন করতে পারেন এবং তারপরে এমন কিছু করতে পারেন:
if ([[UIApplication sharedApplication] respondsToSelector:@selector(terminate)]) {
[[UIApplication sharedApplication] performSelector:@selector(terminate)];
} else {
kill(getpid(), SIGINT);
}
অ্যাপল এই ফাংশনগুলির ব্যবহারকে কঠোরভাবে নিরুৎসাহিত করার কারণে আমরা অ্যাপ্লিকেশন exit(0)
, abort()
ফাংশনগুলি ব্যবহার করে অ্যাপটি ছাড়তে পারি না । যদিও আপনি এই ক্রিয়াগুলি বিকাশ বা পরীক্ষার উদ্দেশ্যে ব্যবহার করতে পারেন।
বিকাশ বা পরীক্ষার সময় যদি আপনার অ্যাপ্লিকেশনটি সমাপ্ত করা প্রয়োজন, তবে গর্ভপাত বন্ধন কার্য, বা ম্যাক্রোর প্রতিস্থাপন করার পরামর্শ দেওয়া হয়
আরও তথ্য পেতে দয়া করে এই অ্যাপল প্রশ্নোত্তর থ্রেডটি সন্ধান করুন।
এই ফাংশনটির ব্যবহারের ফলে অ্যাপ্লিকেশন ক্র্যাশ হওয়ার মতো ছাপ তৈরি করুন। সুতরাং আমি কিছু পরামর্শ পেয়েছি যেমন অ্যাপ্লিকেশনটি বন্ধ করার বিষয়ে সচেতন ব্যবহারকারীর কাছে নির্দিষ্ট কার্যকারিতার অভাবের কারণে আমরা সমাপ্তির বার্তা সহ সতর্কতা প্রদর্শন করতে পারি।
তবে অ্যাপ্লিকেশন শুরু এবং বন্ধ করার জন্য আইওএস হিউম্যান ইন্টারফেস গাইডলাইনটি পরামর্শ দেয় যে অ্যাপ্লিকেশনটি বন্ধ করতে কখনই প্রস্থান বা বন্ধ বোতামটি ব্যবহার করবেন না । তারপরে তারা পরিস্থিতি ব্যাখ্যা করতে সঠিক বার্তা প্রদর্শন করার পরামর্শ দিচ্ছেন।
কোনও আইওএস অ্যাপ কখনই বন্ধ বা প্রস্থান বিকল্প প্রদর্শন করে না। লোকেরা যখন কোনও অ্যাপ্লিকেশন ব্যবহার বন্ধ করে দেয় যখন তারা অন্য অ্যাপ্লিকেশনটিতে চলে যায়, হোম স্ক্রিনে ফিরে আসে বা তাদের ডিভাইসগুলি স্লিপ মোডে রাখে।
প্রোগ্রামযুক্তভাবে কোনও আইওএস অ্যাপ্লিকেশনটি কখনও ছাড়বেন না। লোকেদের এটি ক্র্যাশ হিসাবে ব্যাখ্যা করার প্রবণতা রয়েছে। যদি আপনার অ্যাপ্লিকেশনটিকে উদ্দেশ্য হিসাবে কাজ করা থেকে বাধা দেয় তবে আপনাকে ব্যবহারকারীদের পরিস্থিতি সম্পর্কে জানাতে হবে এবং তারা এটি সম্পর্কে কী করতে পারে তা ব্যাখ্যা করতে হবে।
উপরেরগুলি ছাড়াও, ভাল, উত্তর আমি কেবল যুক্ত করতে চেয়েছিলাম, আপনার স্মৃতি পরিষ্কার করার বিষয়ে ভাবুন।
আপনার অ্যাপ্লিকেশনটি প্রস্থান করার পরে, আইফোন ওএস আপনার অ্যাপ্লিকেশন পিছনে থাকা সমস্ত কিছু স্বয়ংক্রিয়ভাবে পরিষ্কার করবে, সুতরাং সমস্ত মেমরি ম্যানুয়ালি মুক্ত করা আপনার অ্যাপ্লিকেশনটি প্রস্থান করতে সময় নিতে পারে এমন পরিমাণ বাড়িয়ে তুলতে পারে।
- (IBAction)logOutButton:(id)sender
{
//show confirmation message to user
CustomAlert* alert = [[CustomAlert alloc] initWithTitle:@"Confirmation" message:@"Do you want to exit?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
alert.style = AlertStyleWhite;
[alert setFontName:@"Helvetica" fontColor:[UIColor blackColor] fontShadowColor:[UIColor clearColor]];
[alert show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex != 0) // 0 == the cancel button
{
//home button press programmatically
UIApplication *app = [UIApplication sharedApplication];
[app performSelector:@selector(suspend)];
//wait 2 seconds while app is going background
[NSThread sleepForTimeInterval:2.0];
//exit app when app is in background
NSLog(@"exit(0)");
exit(0);
}
}
আমি টপ-ট্যল প্রস্থান (0) ফাংশন কল না করে অ্যাপটিকে জোর করে ছেড়ে দিতে (ক্র্যাশ করতে) উপরে উল্লিখিত [[NSMutableArray new] addObject: nil] পদ্ধতির ব্যবহার করেছি।
কেন? কারণ আমার অ্যাপ্লিকেশনটি ম্যান-ইন-মধ্য-আক্রমণের প্রতিরোধ করতে সমস্ত নেটওয়ার্ক API কলগুলিতে শংসাপত্র পিনিং ব্যবহার করে। এর মধ্যে আমার আর্থিক অ্যাপ্লিকেশনটি প্রারম্ভকালে শুরু করা কল অন্তর্ভুক্ত রয়েছে।
যদি শংসাপত্র প্রমাণীকরণ ব্যর্থ হয়, আমার সমস্ত সূচনা কলকে ত্রুটিযুক্ত করে এবং আমার অ্যাপটিকে একটি অনির্দিষ্ট অবস্থায় ছেড়ে দেয়। ব্যবহারকারীকে বাড়িতে যেতে এবং তারপরে অ্যাপ্লিকেশনটিতে ফিরে যেতে সহায়তা করে না, যতক্ষণ না অ্যাপটি ওএস দ্বারা শুদ্ধ না করা হয় এটি এখনও অবিশ্বাস্য এবং অবিশ্বাস্য।
সুতরাং, এই এক ক্ষেত্রে, আমরা ব্যবহারকারীকে জানিয়ে একটি সতর্কতা পপ করা ভাল বলে মনে করেছি যে অ্যাপটি কোনও অনিরাপদ পরিবেশে কাজ করছে এবং তারপরে, তারা "ক্লোজ" চাপলে, উপরোক্ত পদ্ধতিটি ব্যবহার করে অ্যাপটি ছেড়ে দিতে বাধ্য করুন।
[[UIApplication sharedApplication] terminateWithSuccess];
এটি ভাল কাজ করেছে এবং স্বয়ংক্রিয়ভাবে কল করে
- (void)applicationWillTerminateUIApplication *)application delegate.
সংকলন সময় সতর্কতা অপসারণ এই কোড যুক্ত করুন
@interface UIApplication(MyExtras)
- (void)terminateWithSuccess;
@end
আপনার সরাসরি ক্রিয়াকলাপটি কল করা উচিত নয় exit(0)
কারণ এটি অবিলম্বে অ্যাপ্লিকেশনটি প্রস্থান করবে এবং আপনার অ্যাপ্লিকেশনটি ক্র্যাশ হয়ে যাওয়ার মতো দেখাবে। ব্যবহারকারীদের একটি নিশ্চিতকরণ সতর্কতা দেখানো আরও ভাল এবং তাদের এটি নিজেরাই করতে দিন।
func askForQuit(_ completion:@escaping (_ canQuit: Bool) -> Void) {
let alert = UIAlertController(title: "Confirmation!", message: "Do you want to quit the application", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Yes", style: UIAlertAction.Style.default, handler: { (action) in
alert.dismiss(animated: true, completion: nil)
completion(true)
}))
alert.addAction(UIAlertAction(title: "No", style: UIAlertAction.Style.cancel, handler: { (action) in
alert.dismiss(animated: true, completion: nil)
completion(false)
}))
self.present(alert, animated: true, completion: nil)
}
/// Will quit the application with animation
func quit() {
UIApplication.shared.perform(#selector(NSXPCConnection.suspend))
/// Sleep for a while to let the app goes in background
sleep(2)
exit(0)
}
self.askForQuit { (canQuit) in
if canQuit {
self.quit()
}
}
কোনও অ্যাপ কখন প্রস্থান করবে তা ব্যবহারকারীর সিদ্ধান্ত নেওয়া উচিত। আমি মনে করি না যে কোনও অ্যাপ্লিকেশন প্রস্থান করলে এটি একটি ভাল ব্যবহারকারীর ইন্টারঅ্যাকশন। সুতরাং এটির জন্য কোনও দুর্দান্ত এপিআই নেই, কেবলমাত্র হোম বোতামটিতে একটি রয়েছে।
যদি কোনও ত্রুটি থাকে: এটিকে আরও কার্যকর করুন বা ব্যবহারকারীকে জানান ify যদি আবার পুনঃসূচনা করতে হয়: ব্যবহারকারীকে জানানোর চেয়ে এটি আরও কার্যকর করুন।
এটি বোবা লাগছে, তবে ব্যবহারকারীকে সিদ্ধান্ত না দেওয়া এবং তাকে অবহিত না করে অ্যাপটি থেকে বেরিয়ে আসা খারাপ অভ্যাস। এবং যেহেতু ব্যবহারকারীর কথোপকথনের জন্য একটি হোম বোতাম রয়েছে, অ্যাপল জানিয়েছে, একই ফাংশনের জন্য দুটি জিনিস থাকা উচিত নয় (একটি অ্যাপ্লিকেশনটি প্রস্থান করা হচ্ছে)।
হোম বোতাম ব্যতীত অন্য কোনও অ্যাপ থেকে প্রস্থান করা সত্যিই নন-আইওএস-এস্কো পদ্ধতির।
যদিও আমি এই সহায়কটি কোনও ব্যক্তিগত জিনিস ব্যবহার করি না:
void crash()
{ [[NSMutableArray new] addObject:NSStringFromClass(nil)]; }
তবে এখনও আমার ক্ষেত্রে উত্পাদনের উদ্দেশ্যে নয়। এটি ক্র্যাশ রিপোর্টিং পরীক্ষা করার জন্য, বা কোনও কোর ডেটা রিসেটের পরে দ্রুত পুনঃসূচনা করার জন্য। সবেমাত্র এটিকে নিরাপদ করে দিয়েছে যদি উত্পাদন কোডে ফাংশনটি ছেড়ে যায় তবে তা প্রত্যাখ্যান না করা।
আইপ্যাডএস 13 এ আপনি এখন সমস্ত দৃশ্য সেশন বন্ধ করতে পারেন:
for session in UIApplication.shared.openSessions {
UIApplication.shared.requestSceneSessionDestruction(session, options: nil, errorHandler: nil)
}
এই কল করবে applicationWillTerminate(_ application: UIApplication)
আপনার অ্যাপের প্রতিনিধিকে এবং অ্যাপটি শেষ পর্যন্ত শেষ করবে।
তবে দুটি বিষয় থেকে সাবধান থাকুন:
এটি অবশ্যই সমস্ত দৃশ্য বন্ধ করার জন্য ব্যবহার করা উচিত নয় । ( https://developer.apple.com/design/human-interface-guidlines/ios/system-capables/m Multipleple-windows/ দেখুন )
এটি একটি আইফোনে আইওএস 13 এ সংকলন করে সূক্ষ্মভাবে চালিত হয়, তবে কিছুই করার মতো মনে হয় না।
আইওএস / আইপ্যাডএস 13 এ দৃশ্য সম্পর্কে আরও তথ্য: https://developer.apple.com/docamentation/uikit/app_and_en পরিবেশ /scenes
এটা তোলে যদি এটি একটি চিরায়ু অ্যাপ্লিকেশন যে পটভূমিতে executes হয় একটি অ্যাপ্লিকেশন থেকে প্রস্থান করার জন্য, উদাহরণস্বরূপ অবস্থান আপডেট (ব্যবহার পেতে জন্য উপযুক্ত হতে পারে আপডেটেড অবস্থান ব্যাকগ্রাউন্ড ক্ষমতা ব্যবহার করে)।
উদাহরণস্বরূপ, আসুন আমরা বলি যে ব্যবহারকারী আপনার অবস্থান ভিত্তিক অ্যাপ্লিকেশনটি লগ আউট করে এবং হোম বোতামটি ব্যবহার করে অ্যাপটিকে ব্যাকগ্রাউন্ডে ঠেলে দেয়। এক্ষেত্রে আপনার অ্যাপটি চালিয়ে যেতে পারে তবে এটি সম্পূর্ণরূপে প্রস্থান করা বুদ্ধিমান হতে পারে। এটি ব্যবহারকারীর পক্ষে ভাল হবে (মেমরি এবং অন্যান্য সংস্থানগুলি ব্যবহার করার দরকার নেই) এবং অ্যাপের স্থিতিশীলতার জন্য ভাল (যেমন নিশ্চিত হওয়া যায় যে অ্যাপটি যখন সম্ভব হয় তখন সময়ে সময়ে পুনরায় চালু হয় মেমরি ফাঁস এবং অন্যান্য লো মেমোরির বিরুদ্ধে সুরক্ষা জাল) সমস্যা)।
এটি (যদিও সম্ভবত না হওয়া উচিত, নীচে দেখুন :-) এমন কিছু দিয়ে অর্জন করা যেতে পারে:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
if (/* logged out */) {
exit(0);
} else {
// normal handling.
}
}
যেহেতু অ্যাপ্লিকেশনটি তখন পটভূমির বাইরে চলে যাবে এটি ব্যবহারকারীর কাছে এটি ভুল দেখায় না, এবং ক্র্যাশের অনুরূপ হবে না, পরবর্তীতে অ্যাপ্লিকেশন চালানোর পরে ব্যবহারকারীর ইন্টারফেসটি পুনরুদ্ধার করা হবে। অন্য কথায়, ব্যবহারকারীর কাছে অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় অ্যাপটিকে সমাপ্তির শুরু করা কোনও সিস্টেমের থেকে আলাদা মনে হবে না।
তবুও, সিস্টেমটি জানাতে যে অ্যাপটি শেষ করা যেতে পারে তার জন্য আরও মানক পদ্ধতির ব্যবহার করা ভাল। উদাহরণস্বরূপ, এক্ষেত্রে, জিপিএস ব্যবহারের প্রয়োজন নেই তা নিশ্চিত করে অবস্থানের আপডেটগুলি অনুরোধ করা, যদি উপস্থিত থাকে তবে মানচিত্রের ভিউতে বর্তমান অবস্থান প্রদর্শন বন্ধ করে। এই পদ্ধতিতে [[UIApplication sharedApplication] backgroundTimeRemaining]
অ্যাপটি ব্যাকগ্রাউন্ডে প্রবেশের কয়েক মিনিট (অর্থাত্ ) অ্যাপ্লিকেশনটি সমাপ্ত করার যত্ন নেবে । এটি অ্যাপ্লিকেশনটি বন্ধ করতে কোড ব্যবহার না করেই একই রকম সুবিধা পাবে।
- (void)applicationDidEnterBackground:(UIApplication *)application
{
if (/* logged out */) {
// stop requesting location updates if not already done so
// tidy up as app will soon be terminated (run a background task using beginBackgroundTaskWithExpirationHandler if needed).
} else {
// normal handling.
}
}
এবং অবশ্যই, exit(0)
অন্য উত্তরগুলির হিসাবে, অগ্রণীতে পরিচালিত গড় উত্পাদনের অ্যাপ্লিকেশনটির জন্য কখনই উপযুক্ত হবে না যে উল্লেখটি http://developer.apple.com/iphone/library/qa/qa2008/qa1561.html