exit(0)退出 ios
2012-12-05 22:18:56 annkey123 阅读数 3736

-(void)animationFinished:(NSString*)animationid finished:(NSNumber*)finished

context:(void*)context

{

   if ([animationid compare:@"exitApplication"]==0) {

      exit(0);// 退出应用程序

       NSLog(@"stop");

    }

}

-(IBAction)exit:(id)sender

{

   [UIViewbeginAnimations:@"exitApplication"context:nil];    //动画名称

    [UIViewsetAnimationDuration:6];

    [UIViewsetAnimationDelegate:self];

    [UIViewsetAnimationTransition:UIViewAnimationCurveEaseInOutforView:self.viewcache:NO]; // 动画方式

//动画结束执行的操作

 [UIVie setAnimationDidStopSelector:@selector(animationFinished:finished:context:)];


   self.view.bounds=CGRectMake(0,0, 0, 0);//动画结束

    [UIViewcommitAnimations];

    

}


2018-01-12 15:34:00 weixin_34280237 阅读数 20

import Foundation

exit和abort都是终止程序执行退出的处理函数,其中exit是正常退出,abort是异常退出,退出时会输出错误信息,然后再调用exit退出。用户体验来说,exit就像是程序崩溃了,直接退出程序。abort就像是点击了home键,有过渡动画(但会等一会儿),一般我们在使用的时候会选择abort()

网上例子1:

UIAlertView* alert = [[UIAlertView alloc] initWithTitle:self.exitapplication message:@"" delegate:self cancelButtonTitle:self.exityes otherButtonTitles:self.exitno,nil];

[alert show];

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

   if(buttonIndex ==0){

        [self exitApplication ];

    }

}


- (void)exitApplication {


    AppDelegate *app = [UIApplication sharedApplication].delegate;


    UIWindow *window = app.window;


    [UIView animateWithDuration:1.0f animations:^{


        window.alpha =0;


        window.frame = CGRectMake(0, window.bounds.size.width, 0, 0);


        } completion:^(BOOL finished) {


        exit(0);


        }];

    //exit(0);


}

2、程序中的exit(1)、abort()、assert(0);

先来看一下程序的死亡方式:

程序的死亡大致有三种:自然死亡,即无疾而终,通常就是main()中的一个return 0;自杀,当程序发现自己再活下去已经没有任何意义时,通常会选择自杀。当然,这种自杀也是一种请求式的自杀,即请求OS将自己毙掉。有三种方式:void exit(int status)和void abort(void)、assert(condition)。他杀,同现实不同的是,程序家族中的他杀行径往往是由自己至亲完成的,通常这个至亲就是他的生身父亲(还是母亲?)。语言本身并没有提供他杀的凶器,这些凶器往往是由OS直接或者间接(通过一些进程库,如pthread)提供的。 自然死是最完美的结局,他杀是我们最不愿意看到的,自杀虽是迫不得已,但主动权毕竟还是由程序自己掌控的;abort被调用时,程序将直接退出,任何对象的析构函数都不会调用

介绍:

abort: 这是默认的程序结束函数,这种方式可能会或可能不会以刷新与关闭打开的文件

或删除临时文件,这与你的设计有关.

exit: 附加了关闭打开文件与返回状态码给执行环境,并调用你用atexit注册的返回函数

assert(1)为oc中的宏,只在debug模式下有用,当条件成立时,程序不会终止掉;当条件不成立时,程序终止。

so,oc程序中建议用assert(condition)函数。

3、选择

Q:怎样用代码方式退出iOS程序

A:没有提供用于正常退出IOS应用的API。

在IOS中,用户点击Home键来关闭应用。你的应用应该符合以下条件:它不能自行调用方法,而应采取措施与用户交互,表明问题的性质和应用可能会采取的行为,比如打开WIFI,使用定位服务等供用户选择确定使用;

警告:不要使用exit函数,调用exit会让用户感觉程序崩溃了,不会有按Home键返回时的平滑过渡和动画效果;另外,使用exit可能会丢失数据,因为调用exit并不会调用-applicationWillTerminate:方法和UIApplicationDelegate方法;

如果在开发或者测试中确实需要强行终止程序时,推荐使用abort 函数和assert宏;

网络例子2:

分为正常退出,异常退出

正常退出的方法:

1、在main函数中执行return

2、调用exit函数

3、调用_exit  函数

------------------------------------------------------------------

异常退出的方法:

1、调用abort函数

2、进程收到某个信号,而该信号使进程终止

------------------------------------------------------------------

不管是哪种退出方式,最终都会执行内核中的同一段代码。这段代码用来关闭进程所有已打开的文件描述符。

释放它所占用的内存和其他资源。

各种退出方式的比较:

1、exit和return的比较,exit是一个函数,有参数。而return是函数执行完毕后的返回。exit把控制权交给系统,而return将控制权交给调用函数。

2、exit和abort的区别,exit是正常终止进程,而abort是异常终止。

3、exit中的参数 如果为0代表进程正常终止,如果为其他值表示程序执行过程中有错误发生,比如除数为0

4、exit和_exit的区别,exit在头文件stdlib中声明,而_exit声明在头文件unistd.h中,两个函数均能正常终止进程。但是

-exit函数执行后会立即返回给内核。而exit函数要先执行一些清除操作,然后将控制权交给内核。

----------------------------------------------------------------------

自己总结(仿安卓平滑退出):

进入后台的两种方法:

let control = UIControl()

control.sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)

或:

let control = UIControl()

control.sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)

添加标识,在APP进入后台后再配合exit(0)方法使用。效果和安卓退出相似。

参考:

https://www.cnblogs.com/chglog/p/5979795.html

https://www.cnblogs.com/zhangxuan/p/6410391.html

2015-04-13 14:19:00 u011194397 阅读数 444
- (void)exitApplication {
 
    [UIView beginAnimations:@"exitApplication" context:nil];
 
    [UIView setAnimationDuration:0.5];
 
    [UIView setAnimationDelegate:self];
 
    // [UIView setAnimationTransition:UIViewAnimationCurveEaseOut forView:self.view.window cache:NO];
 
    [UIView setAnimationTransition:UIViewAnimationCurveEaseOut forView:self.window cache:NO];
 
    [UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)];
 
    //self.view.window.bounds = CGRectMake(0, 0, 0, 0);
 
    self.window.bounds = CGRectMake(0, 0, 0, 0);
 
    [UIView commitAnimations];
 
}
 
 
 
- (void)animationFinished:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
 
    if ([animationID compare:@"exitApplication"] == 0) {
 
        exit(0);
 
    }
 
}

  

2016-04-17 00:31:43 Joycecsdn 阅读数 2121
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:self.exitapplication message:@"" delegate:self cancelButtonTitle:self.exityes otherButtonTitles:self.exitno,nil];
        
  [alert show];


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{
    if(buttonIndex ==0){
        
        
        [self exitApplication ];
        
    }

}

- (void)exitApplication {
    
    AppDelegate *app = [UIApplication sharedApplication].delegate;
    UIWindow *window = app.window;
    
    [UIView animateWithDuration:1.0f animations:^{
        window.alpha = 0;
        window.frame = CGRectMake(0, window.bounds.size.width, 0, 0);
    } completion:^(BOOL finished) {
        exit(0);
    }];
    //exit(0);
    
}

用此方法可能会在上传AppStore时被拒

[self performSelector:@selector(notExistCall)];  
abort();

苹果原则上是反对这样做的,他们认为应用的生命周期是由用户来控制的,要退出就按HOME键

exit(0) ? 还有人敢用?? 为什么这么说? 好像在OS还在2.*的时候,苹果就已经禁止了这个方法, 原因是容易让用户产生”产品质量不好”的错觉.
调用个不存在的方法让程序崩溃 比如: [self performSelector:@selector(Ih8ThisButICantStopU)];
raise一个NSException (其实原理是一样的)
abort(); 苹果官方的例子中好多地方用到了这个,所以应该是安全



Q:怎样用代码方式退出IOS程序


       A:没有提供用于正常退出IOS应用的API。


       在IOS中,用户点击Home键来关闭应用。你的应用应该符合以下条件:它不能自行调用方法,而应采取措施与用户交互,表明问题的性质和应用可能会采取的行为,比如打开WIFI,使用定位服务等供用户选择确定使用;


       警告:不要使用exit函数,调用exit会让用户感觉程序崩溃了,不会有按Home键返回时的平滑过渡和动画效果;另外,使用exit可能会丢失数据,因为调用exit并不会调用-applicationWillTerminate:方法和UIApplicationDelegate方法;


如果在开发或者测试中确实需要强行终止程序时,推荐使用abort 函数和assert宏;


iOS代码退出程序一般直接调用exit(0); ,但是视觉上看起来像闪退,于是,我借鉴了下网上别人的代码,写了一个向下切出退出程序的方法,代码如下:


- (void)exitApplication {
    AppDelegate *app = [UIApplication sharedApplication].delegate;
    UIWindow *window = app.window;
     
    [UIView animateWithDuration:1.0f animations:^{
        window.alpha = 0;
        window.frame = CGRectMake(0, window.bounds.size.width, 0, 0);
    } completion:^(BOOL finished) {
        exit(0);
    }];
     
}


2017-07-18 14:20:19 qq_28936845 阅读数 316
 +(void)exitGame{
    abort();
    [UIApplication sharedApplication].idleTimerDisabled=NO;

iOS 退出应用程序

阅读数 862

iOS 退出登录

阅读数 150

iOS 退出app

阅读数 2

iOS 退出键盘

阅读数 546

ios 退出app

阅读数 173

没有更多推荐了,返回首页