美文网首页A知识点2程序员首页投稿(暂停使用,暂停投稿)
ios-控制器生命周期与线程生命周期的关系

ios-控制器生命周期与线程生命周期的关系

作者: AlexPei | 来源:发表于2016-05-08 23:58 被阅读644次
    • 线程的生命周期与控制器的生命周期无关.
    • 首先看示例的效果图
    01.gif
    • Viewcontroller中的代码
    
    #import "ViewController.h"
    #import "TwoViewController.h"
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
      NSLog(@"开始");
      TwoViewController * vc = [TwoViewController new];
      [vc demoWithBlock:^(NSString *str) {
        NSLog(@"%@",str);
      }];
    }
    
    
    • 当触摸屏幕的时候创建TwoViewcontroller 然后执行vc的方法,看TwoViewcontroller中的方法如何实现的
    
    -(void)demoWithBlock:(void (^)(NSString *))block{
    
      NSLog(@"开始执行dmeo");
     //全局队列异步执行,不堵塞主线程
      dispatch_async(dispatch_get_global_queue(0, 0), ^{
       //然线程睡 4s
        [NSThread sleepForTimeInterval:4.0];
       //主队列执行block,回调block.
        dispatch_async(dispatch_get_main_queue(), ^{
         
          block(@"回去");
        });
       
       
      });
     
    }
    
    
    • 从图片演示上看:当点击屏幕的时候创建了vc,然后执行了vc的方法,当点击方法执行完毕后,vc被释放.但是添加到队列中的任务block并没有被释放.而是根据我们做的延迟执行了.

    小结: 当任务被添加到队列以后就不会被销毁,即使是控制器被销毁,任务也不会被销毁或者暂停.就想 "泼出去的水,你收不回来,只能任它蒸发..."

    相关文章

      网友评论

      本文标题:ios-控制器生命周期与线程生命周期的关系

      本文链接:https://www.haomeiwen.com/subject/jnzsrttx.html