iPhone 응용 프로그램을 종료하는 적절한 방법?


10 Answers

iPhone에는 앱을 종료하는 개념이 없습니다. 앱을 종료해야하는 유일한 동작은 휴대 전화의 홈 버튼을 터치하는 것입니다. 개발자가 액세스 할 수있는 것이 아닙니다.

애플에 따르면, 당신의 앱은 독자적으로 종료해서는 안된다. 사용자가 홈 버튼을 누르지 않았으므로 홈 화면으로 돌아 가면 앱에 오류가 발생했다는 인상을 사용자에게줍니다. 이는 혼란스럽고 비표준적인 행동이므로 피해야합니다.

Question

iPhone 앱을 프로그래밍하고 있는데 특정 사용자 행동으로 인해 앱을 강제 종료해야합니다. 할당 된 메모리를 정리 한 후 응용 프로그램을 종료하기 위해 호출 할 적절한 방법은 무엇입니까?




몇 가지 테스트를 마치면 다음과 같이 말할 수 있습니다.

  • 개인 인터페이스를 사용하면 : [UIApplication sharedApplication] 인해 응용 프로그램이 손상된 것처럼 보이지만, - (void)applicationWillTerminate:(UIApplication *)application 이 호출됩니다.
  • exit(0); 또한 응용 프로그램을 종료하지만 "정상"모양 (스프링 보드의 아이콘은 축소 효과와 함께 예상대로 나타납니다), - (void)applicationWillTerminate:(UIApplication *)application 대리자 메서드는 호출하지 않습니다.

나의 충고:

  1. 대리자에서 수동으로 - (void)applicationWillTerminate:(UIApplication *)application 을 호출하십시오.
  2. exit(0); 호출하십시오 exit(0); .



- (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);




최근에 내 앱이 거부되었습니다. bc 필자는 문서화되지 않은 메소드를 사용했습니다. 문자 그대로 :

"안타깝게도 개인용 API를 사용하기 때문에 앱 스토어에 추가 할 수 없습니다 iPhone 개발자 프로그램 라이센스 계약 섹션 3.3.1에 명시된 비공개 API를 사용하는 것은 금지됩니다.

"3.3.1 응용 프로그램은 Apple이 정한 방식으로 문서화 된 API 만 사용할 수 있으며 비공개 API를 사용하거나 호출해서는 안됩니다."

애플리케이션에 포함 된 비공개 API는 terminateWithSuccess입니다. "




위의 것 이외에, 좋은, 대답을 추가하고 싶습니다, 당신의 기억을 정리하는 것에 대해 생각하십시오.

응용 프로그램이 종료 된 후 iPhone OS가 응용 프로그램을 자동으로 정리하므로 모든 메모리를 수동으로 해제하면 응용 프로그램을 종료하는 데 걸리는 시간이 길어질 수 있습니다.




여기에서 Q & A를 확인하십시오 : https://developer.apple.com/library/content/qa/qa1561/_index.html

Q : iOS 응용 프로그램을 프로그래밍 방식으로 종료하려면 어떻게해야합니까?

iOS 애플리케이션을 정상적으로 종료하기 위해 제공되는 API는 없습니다.

iOS에서 사용자는 홈 버튼을 눌러 응용 프로그램을 닫습니다. 신청서에 의도 된 기능을 제공 할 수없는 조건이있는 경우, 문제의 성격과 사용자가 취할 수있는 조치 (WiFi 켜기, 위치 서비스 사용 가능 등)를 나타내는 경고를 사용자에게 표시하는 것이 좋습니다. 사용자가 자신의 재량에 따라 애플리케이션을 종료 할 수 있도록 허용합니다.

경고 : exit 기능을 호출하지 마십시오. 응용 프로그램 exit 호출은 정상 종료를 수행하고 홈 화면에 다시 애니메이션을 적용하는 대신 사용자에게 충돌 한 것처럼 보입니다.

또한 -applicationWillTerminate: 데이터를 저장하지 않을 수 있으며 exit를 호출하면 비슷한 UIApplicationDelegate 메서드가 호출되지 않습니다.

개발 또는 테스트 중에 응용 프로그램을 종료 abort 경우 abort 함수 또는 assert 매크로를 사용하는 것이 좋습니다




[[UIApplication sharedApplication] terminateWithSuccess];

잘 작동하고 자동으로 호출됩니다.

- (void)applicationWillTerminateUIApplication *)application delegate.

컴파일 타임 경고를 제거하려면이 코드를 추가하십시오.

@interface UIApplication(MyExtras)
  - (void)terminateWithSuccess;
@end 



프로그램을 종료하는 방법은 아니지만 사람들을 강제로 종료시키는 방법입니다.

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];



앱을 종료 할 때 홈 버튼이 아닌 다른 방법을 사용하면 iOS 방식 이 아닙니다 .

나는 개인도 사용하지 않는이 도우미를했습니다.

void crash()
{ [[NSMutableArray new] addObject:NSStringFromClass(nil)]; }

그러나 여전히 내 경우에는 생산을위한 것이 아닙니다. 이는 충돌보고를 테스트하거나 핵심 데이터 재설정 후 빠르게 다시 시작하기위한 것입니다. 함수가 생산 코드에 남아 있으면 거부되지 않도록 안전하게 만들었습니다.




이것은 좋은 대답을 얻었지만 약간 확장하기로 결정했습니다 :

Apple의 iOS 휴먼 인터페이스 가이드 라인을 잘 읽지 않고도 애플리케이션을 AppStore로 받아 들일 수는 없습니다. (그들은 그 (것)들에 대하여 무엇이든 을하기를 위해 당신을 거절 할 권리를 유지합니다.) 섹션 "프로그래밍 방식으로 종료하지 마십시오" http://developer.apple.com/library/ios/#DOCUMENTATION/UserExperience/Conceptual/MobileHIG/UEBestPractices/UEBestPractices.html 은이 경우 어떻게 대처해야하는지에 대한 정확한 가이드 라인입니다.

애플 플랫폼에 문제가 생긴다면 쉽게 해결책을 찾을 수 없으므로 HIG에 문의하십시오. Apple이 당신이 그것을하기를 원하지 않는다고 생각할 수도 있습니다. 보통 (저는 Apple이 아니므로 항상 보장 할 수는 없습니다) 그들의 문서에서 그렇게 말하고 있습니다.




Related