ฉันกำลังเขียนโปรแกรมแอพ iPhone และฉันจำเป็นต้องบังคับให้ออกเนื่องจากการกระทำของผู้ใช้บางอย่าง หลังจากล้างหน่วยความจำที่แอพจัดสรรแล้ววิธีการที่เหมาะสมในการโทรออกเพื่อยกเลิกแอปพลิเคชันคืออะไร
ฉันกำลังเขียนโปรแกรมแอพ iPhone และฉันจำเป็นต้องบังคับให้ออกเนื่องจากการกระทำของผู้ใช้บางอย่าง หลังจากล้างหน่วยความจำที่แอพจัดสรรแล้ววิธีการที่เหมาะสมในการโทรออกเพื่อยกเลิกแอปพลิเคชันคืออะไร
คำตอบ:
คุณเคยลองexit(0)
ไหม
หรือ[[NSThread mainThread] exit]
แม้ว่าฉันจะไม่ได้ลองก็ตามดูเหมือนว่าจะเป็นทางออกที่เหมาะสมกว่า
บน iPhone ไม่มีแนวคิดในการเลิกใช้แอพ การกระทำเพียงอย่างเดียวที่ควรทำให้แอปเลิกใช้คือแตะปุ่มหน้าหลักบนโทรศัพท์และนั่นไม่ใช่สิ่งที่นักพัฒนาซอฟต์แวร์สามารถเข้าถึงได้
แอปของคุณไม่ควรบอกเลิกด้วยตัวเอง เนื่องจากผู้ใช้ไม่ได้กดปุ่มโฮมการกลับไปที่หน้าจอหลักใด ๆ จะทำให้ผู้ใช้รู้สึกว่าแอปของคุณล้มเหลว สิ่งนี้ทำให้เกิดความสับสนพฤติกรรมที่ไม่ได้มาตรฐานและควรหลีกเลี่ยง
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)
ไม่สำคัญ แอพของคุณมี "พฤติกรรมเลิก" พฤติกรรมการออกจากตัวเองนั้นเป็นสิ่งต้องห้ามใน AppStore ยกเว้นบางแอพที่ทำโดยบุคคลที่สามที่สำคัญมาก นอกจากนี้พฤติกรรมการเลียนแบบปุ่มโฮมอาจถูกปฏิเสธได้เช่นกัน
ตรวจสอบคำถามและคำตอบได้ที่นี่: https://developer.apple.com/library/content/qa/qa1561/_index.html
ถาม: ฉันจะออกจากโปรแกรม iOS ได้อย่างไร
ไม่มี API ที่ให้ไว้สำหรับการยกเลิกแอปพลิเคชัน iOS อย่างงดงาม
ใน iOS ผู้ใช้กดปุ่มโฮมเพื่อปิดแอปพลิเคชัน หากแอปพลิเคชันของคุณมีเงื่อนไขที่ไม่สามารถใช้งานได้ตามที่ต้องการแนวทางที่แนะนำคือการแสดงการแจ้งเตือนสำหรับผู้ใช้ที่ระบุลักษณะของปัญหาและการดำเนินการที่เป็นไปได้ที่ผู้ใช้สามารถทำได้ - เปิด WiFi อนุญาตให้ผู้ใช้ยกเลิกแอปพลิเคชันตามดุลยพินิจของตนเอง
คำเตือน:อย่าเรียกใช้
exit
ฟังก์ชัน แอปพลิเคชันการโทรexit
จะปรากฏต่อผู้ใช้เพื่อให้เกิดความผิดพลาดแทนที่จะทำการยกเลิกอย่างนุ่มนวลและเคลื่อนไหวกลับไปที่หน้าจอโฮมนอกจากนี้ข้อมูลอาจไม่ถูกบันทึกเพราะ
-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];
ไปที่ info.plist ของคุณและตรวจสอบปุ่ม "แอปพลิเคชันไม่ทำงานในพื้นหลัง" เวลานี้เมื่อผู้ใช้คลิกปุ่มหน้าแรกแอปพลิเคชันจะออกอย่างสมบูรณ์
เพิ่มUIApplicationExitsOnSuspend
คุณสมบัติในการapplication-info.plist
true
หลังจากการทดสอบฉันสามารถพูดได้ดังนี้:
[UIApplication sharedApplication]
จะทำให้แอปพลิเคชันดูเหมือนว่าจะเกิดข้อผิดพลาด แต่จะเรียก- (void)applicationWillTerminate:(UIApplication *)application
ก่อนทำเช่นนั้นexit(0);
จะเป็นการยกเลิกแอปพลิเคชัน แต่จะมีลักษณะ "ปกติ" (ไอคอนของกระดานกระโดดน้ำปรากฏตามที่คาดไว้พร้อมเอฟเฟกต์ซูมออก) แต่จะไม่เรียก- (void)applicationWillTerminate:(UIApplication *)application
วิธีการมอบหมายคำแนะนำของฉัน:
- (void)applicationWillTerminate:(UIApplication *)application
บนผู้รับมอบสิทธิ์exit(0);
.ApplicationDelegate ของคุณได้รับแจ้งจากการเลิกโดยเจตนาโดยผู้ใช้:
- (void)applicationWillResignActive:(UIApplication *)application {
เมื่อฉันได้รับการแจ้งเตือนนี้ฉันแค่โทร
exit(0);
ซึ่งทำงานทั้งหมด และสิ่งที่ดีที่สุดคือมันเป็นความตั้งใจของผู้ใช้ที่จะเลิกซึ่งเป็นสาเหตุที่ไม่ควรมีปัญหาในการโทรหาที่นั่น
ในแอปเสียงของฉันมีความจำเป็นต้องออกจากแอปหลังจากที่ผู้คนซิงค์อุปกรณ์ของพวกเขาในขณะที่เพลงยังคงเล่นอยู่ ทันทีที่การซิงค์เสร็จสมบูรณ์ฉันจะได้รับการแจ้งเตือน แต่การเลิกใช้แอพในทันทีหลังจากนั้นจะดูเหมือนเป็นความผิดพลาด
ดังนั้นแทนที่จะตั้งค่าสถานะให้ออกจากแอปในการดำเนินการฉากหลังถัดไปแทน สิ่งใดที่ใช้ได้สำหรับการรีเฟรชแอปหลังจากซิงค์
แอพของฉันถูกปฏิเสธเมื่อไม่นานมานี้ฉันใช้วิธีการที่ไม่มีเอกสาร ตัวอักษร:
"น่าเสียดายที่ไม่สามารถเพิ่มลงใน App Store ได้เนื่องจากใช้ API ส่วนตัวไม่อนุญาตให้ใช้ API ที่ไม่ใช่สาธารณะซึ่งระบุไว้ในข้อตกลงสิทธิ์ใช้งานโปรแกรมนักพัฒนาซอฟต์แวร์ iPhone 3.3.1:
"3.3.1 แอปพลิเคชันอาจใช้ Documented APIs ในลักษณะที่กำหนดโดย Apple เท่านั้นและต้องไม่ใช้หรือโทร API ส่วนตัวใด ๆ "
API ที่ไม่ใช่แบบสาธารณะที่รวมอยู่ในแอปพลิเคชันของคุณจะยุติการใช้งานด้วย "
แอปเปิ้ลพูดว่า:
"คำเตือน: อย่าเรียกใช้ฟังก์ชั่น exit แอพพลิเคชั่นที่โทรออกจะปรากฏขึ้นต่อผู้ใช้ว่าเกิดข้อผิดพลาดแทนที่จะทำการเลิกอย่างนุ่มนวลและเคลื่อนไหวกลับไปที่หน้าจอโฮม"
ฉันคิดว่านี่เป็นข้อสมมติฐานที่ไม่ดี หากผู้ใช้แตะที่ปุ่มออกและมีข้อความปรากฏขึ้นว่า: "แอปพลิเคชันจะออกจากตอนนี้" จะไม่ปรากฏว่ามีข้อผิดพลาด Apple ควรให้วิธีที่ถูกต้องในการออกจากแอปพลิเคชัน (ไม่ใช่ออก (0))
นี่เป็นคำตอบที่ดี แต่ได้ตัดสินใจขยาย:
คุณไม่สามารถรับแอปพลิเคชันของคุณได้รับการยอมรับจาก AppStore โดยไม่อ่านหลักเกณฑ์การเชื่อมต่อ iOS Human Human (พวกเขาสงวนสิทธิ์ที่จะปฏิเสธคุณในการทำสิ่งใด ๆกับพวกเขา) ส่วน "อย่าออกโดยทางโปรแกรม" http://developer.apple.com/library/ios/#DOCUMENTATION/UserExperience/Conceptual/MobileHIG/UEBestPractices html เป็นแนวทางที่ถูกต้องในวิธีที่คุณควรปฏิบัติต่อในกรณีนี้
หากคุณเคยมีปัญหากับแพลตฟอร์ม Apple คุณไม่สามารถหาวิธีแก้ปัญหาได้ง่ายให้ปรึกษา HIG เป็นไปได้ที่ Apple ไม่ต้องการให้คุณทำและพวกเขามักจะ (ฉันไม่ใช่ Apple ดังนั้นฉันจึงไม่สามารถรับประกันได้เสมอ) ในเอกสารของพวกเขา
อืมคุณอาจต้อง 'ออกจากแอปพลิเคชันถ้าพูดว่าแอปพลิเคชันของคุณต้องการการเชื่อมต่ออินเทอร์เน็ต คุณสามารถแสดงการแจ้งเตือนจากนั้นทำสิ่งนี้:
if ([[UIApplication sharedApplication] respondsToSelector:@selector(terminate)]) {
[[UIApplication sharedApplication] performSelector:@selector(terminate)];
} else {
kill(getpid(), SIGINT);
}
เราไม่สามารถออกจากแอปใช้exit(0)
, abort()
ฟังก์ชั่นเช่นแอปเปิ้ลขอกีดกันการใช้ฟังก์ชั่นเหล่านี้ แม้ว่าคุณจะสามารถใช้ฟังก์ชั่นนี้เพื่อการพัฒนาหรือทดสอบได้
หากในระหว่างการพัฒนาหรือทดสอบจำเป็นต้องยกเลิกแอปพลิเคชันของคุณแนะนำให้ยกเลิกการทำงานหรือยืนยันแมโคร
โปรดค้นหากระทู้ถามตอบ Apple เพื่อรับข้อมูลเพิ่มเติม
เนื่องจากการใช้ฟังก์ชันนี้สร้างความประทับใจเหมือนกับแอปพลิเคชันหยุดทำงาน ดังนั้นฉันจึงมีข้อเสนอแนะบางอย่างเช่นเราสามารถแสดงข้อความแจ้งเตือนพร้อมข้อความบอกเลิกเพื่อแจ้งให้ผู้ใช้ทราบเกี่ยวกับการปิดแอปเนื่องจากฟังก์ชั่นบางอย่างไม่ทำงาน
แต่ iOS Human Interface Guideline สำหรับการเริ่มต้นและหยุดแอพแนะนำว่าอย่าใช้ปุ่ม Quit หรือ Closeเพื่อยกเลิกแอปพลิเคชัน หาก แต่พวกเขากำลังแนะนำให้แสดงข้อความที่เหมาะสมเพื่ออธิบายสถานการณ์
แอพ iOS จะไม่แสดงตัวเลือกปิดหรือปิด ผู้คนหยุดใช้แอพเมื่อพวกเขาเปลี่ยนไปใช้แอพอื่นกลับไปที่หน้าจอหลักหรือทำให้อุปกรณ์อยู่ในโหมดสลีป
อย่าออกจากแอป iOS โดยทางโปรแกรม คนมักจะตีความว่านี่เป็นความผิดพลาด หากมีสิ่งใดขัดขวางแอปของคุณทำงานตามที่ตั้งใจไว้คุณต้องแจ้งผู้ใช้เกี่ยวกับสถานการณ์และอธิบายว่าพวกเขาสามารถทำอะไรได้บ้าง
นอกเหนือจากข้างต้นคำตอบที่ดีฉันแค่อยากจะเพิ่มคิดเกี่ยวกับการล้างหน่วยความจำของคุณ
หลังจากที่แอปพลิเคชันของคุณออกแล้ว iPhone OS จะล้างข้อมูลแอปพลิเคชันของคุณโดยอัตโนมัติดังนั้นการเพิ่มหน่วยความจำด้วยตนเองเพียงแค่เพิ่มระยะเวลาที่แอปพลิเคชันของคุณจะออก
- (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);
}
}
ฉันใช้วิธี [[NSMutableArray ใหม่] addObject: nil] ดังกล่าวข้างต้นเพื่อบังคับให้ออก (ขัดข้อง) แอปโดยไม่ต้องทำการโทรออกจากนิทาน (0)
ทำไม? เพราะแอพของฉันใช้ใบรับรองปักหมุดในการเรียก 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()
}
}
ผู้ใช้ควรตัดสินใจเมื่อแอพออก ฉันไม่คิดว่ามันเป็นการโต้ตอบกับผู้ใช้ที่ดีเมื่อแอพหยุดทำงาน ดังนั้นจึงไม่มี API ที่ดีสำหรับมันมีเพียงปุ่มโฮมเท่านั้นที่มี
หากมีข้อผิดพลาด: ใช้งานได้ดีขึ้นหรือแจ้งผู้ใช้ หากจะต้องมีการรีสตาร์ท: ใช้งานได้ดีกว่าการแจ้งเตือนผู้ใช้
มันฟังดูโง่เง่า แต่เป็นการดีที่จะออกจากแอปโดยไม่แจ้งให้ผู้ใช้ตัดสินใจและไม่แจ้งเตือนเขา และเนื่องจากมีปุ่มโฮมสำหรับการโต้ตอบกับผู้ใช้ Apple จึงไม่ควรมี 2 สิ่งสำหรับฟังก์ชั่นเดียวกัน (ออกจากแอป)
ออกจากแอปด้วยวิธีอื่นนอกเหนือจากปุ่มโฮมนั้นไม่ใช่ iOS จริงๆวิธี
แม้ว่าฉันจะเป็นผู้ช่วยตัวนี้ แต่ก็ไม่ได้ใช้สิ่งส่วนตัว
void crash()
{ [[NSMutableArray new] addObject:NSStringFromClass(nil)]; }
แต่ก็ยังไม่ได้มีไว้สำหรับการผลิตในกรณีของฉัน มีไว้สำหรับการทดสอบการรายงานข้อขัดข้องหรือเพื่อรีสตาร์ทอย่างรวดเร็วหลังจากการรีเซ็ตข้อมูลหลัก เพียงทำให้ปลอดภัยที่จะไม่ถูกปฏิเสธถ้าฟังก์ชั่นที่เหลืออยู่ในรหัสการผลิต
Darvin
สามารถเรียกใช้ไลบรารีได้
import Darwin
exit(0) // Here you go
หมายเหตุ: สิ่งนี้ไม่ได้รับการแนะนำในแอปพลิเคชัน iOS
การทำเช่นนี้จะทำให้คุณได้รับบันทึกข้อผิดพลาด
ใน iPadOS 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-guidelines/ios/system-capabilities/multiple-windows/ )
มันรวบรวมและทำงานได้ดีบน iOS 13 บน iPhone แต่ดูเหมือนจะไม่ทำอะไรเลย
ข้อมูลเพิ่มเติมเกี่ยวกับฉากต่างๆใน iOS / iPadOS 13: https://developer.apple.com/documentation/uikit/app_and_environment/scenes
ออกจากแอปด้วยวิธีอื่น
แม้ว่าฉันจะเป็นผู้ช่วยตัวนี้ แต่ก็ไม่ได้ใช้สิ่งส่วนตัว
ออก (0);
อาจเหมาะสมที่จะออกจากแอพหากเป็นแอปที่มีอายุการใช้งานยาวนานและดำเนินการในพื้นหลังเช่นรับการอัปเดตตำแหน่ง (โดยใช้การอัปเดตตำแหน่งความสามารถในการพื้นหลังสำหรับที่)
ตัวอย่างเช่นสมมติว่าผู้ใช้ล็อกเอาท์จากแอปที่อ้างอิงตำแหน่งของคุณและผลักแอปไปที่พื้นหลังโดยใช้ปุ่มหน้าแรก ในกรณีนี้แอปของคุณอาจยังคงทำงานต่อไป แต่อาจเหมาะสมกว่าที่จะออก มันจะดีสำหรับผู้ใช้ (ปล่อยหน่วยความจำและทรัพยากรอื่น ๆ ที่ไม่จำเป็นต้องใช้) และดีสำหรับความเสถียรของแอป (เช่นทำให้แน่ใจว่าแอปเริ่มต้นใหม่เป็นระยะเมื่อเป็นไปได้คือความปลอดภัยสุทธิจากหน่วยความจำรั่วและหน่วยความจำต่ำอื่น ๆ ปัญหา)
สิ่งนี้สามารถทำได้ (แม้ว่าอาจจะไม่ควรดูด้านล่าง :-) ได้ด้วย:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
if (/* logged out */) {
exit(0);
} else {
// normal handling.
}
}
เนื่องจากแอพจะออกจากพื้นหลังมันจะไม่ดูผิดกับผู้ใช้และจะไม่คล้ายกับความล้มเหลวโดยที่ส่วนติดต่อผู้ใช้จะถูกกู้คืนในครั้งต่อไปที่พวกเขาเรียกใช้แอป กล่าวอีกนัยหนึ่งกับผู้ใช้มันจะไม่แตกต่างจากระบบที่เริ่มต้นการยกเลิกแอพเมื่อแอพอยู่ในพื้นหลัง
แต่ถึงกระนั้นก็จะดีกว่าที่จะใช้วิธีการมาตรฐานมากขึ้นเพื่อให้ระบบทราบว่าแอปสามารถยกเลิก ตัวอย่างเช่นในกรณีนี้โดยการทำให้แน่ใจว่า GPS ไม่ได้ถูกใช้งานโดยหยุดการร้องขอการอัปเดตตำแหน่งรวมถึงการปิดการแสดงตำแหน่งปัจจุบันในมุมมองแผนที่หากมี ด้วยวิธีนี้ระบบจะจัดการกับการยกเลิกแอปในไม่กี่นาที (เช่น[[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