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

  • 线程的生命周期与控制器的生命周期无关.
  • 首先看示例的效果图
ios-控制器生命周期与线程生命周期的关系_第1张图片
01.gif
  • Viewcontroller中的代码

#import "ViewController.h"
#import "TwoViewController.h"
@interface ViewController ()

@end

@implementation ViewController

-(void)touchesBegan:(NSSet *)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并没有被释放.而是根据我们做的延迟执行了.

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

  • demo链接:http://pan.baidu.com/s/1b2JxoE

你可能感兴趣的:(ios-控制器生命周期与线程生命周期的关系)