- 線程的生命周期與控制器的生命周期無關(guān).
- 首先看示例的效果圖
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);
}];
}
- 當觸摸屏幕的時候創(chuàng)建TwoViewcontroller 然后執(zhí)行vc的方法,看TwoViewcontroller中的方法如何實現(xiàn)的
-(void)demoWithBlock:(void (^)(NSString *))block{
NSLog(@"開始執(zhí)行dmeo");
//全局隊列異步執(zhí)行,不堵塞主線程
dispatch_async(dispatch_get_global_queue(0, 0), ^{
//然線程睡 4s
[NSThread sleepForTimeInterval:4.0];
//主隊列執(zhí)行block,回調(diào)block.
dispatch_async(dispatch_get_main_queue(), ^{
block(@"回去");
});
});
}
- 從圖片演示上看:當點擊屏幕的時候創(chuàng)建了vc,然后執(zhí)行了vc的方法,當點擊方法執(zhí)行完畢后,vc被釋放.但是添加到隊列中的任務(wù)block并沒有被釋放.而是根據(jù)我們做的延遲執(zhí)行了.
小結(jié): 當任務(wù)被添加到隊列以后就不會被銷毀,即使是控制器被銷毀,任務(wù)也不會被銷毀或者暫停.就想 "潑出去的水,你收不回來,只能任它蒸發(fā)..."