美文网首页iOSiOS程序员
iOS 开发-运行循环RunLoop常驻线程(五)

iOS 开发-运行循环RunLoop常驻线程(五)

作者: 037e3257fa3b | 来源:发表于2017-01-19 23:25 被阅读60次

假如,我们需要在一个子线程中执行多个任务,但是,多个任务又不是连续的。这时就需要我们在开启一条子线程后,一直保持线程处于运行或者就绪状态,而不至于执行完操作后就释放掉了。

1常驻线程

#import "ViewController.h"

@interface ViewController ()
/** 注释 */
@property (nonatomic, strong) NSThread *thread;
@end

@implementation ViewController


- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //1.创建线程
    self.thread = [[NSThread alloc]initWithTarget:self selector:@selector(task1) object:nil];
    
    [self.thread start];
    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    // 在创建的子线程中执行task2方法,每次点击的时候执行。
    [self performSelector:@selector(task2) onThread:self.thread withObject:nil waitUntilDone:YES];
}

-(void)task1
{
    NSLog(@"task1---%@",[NSThread currentThread]);
    //    while (1) {
    //       NSLog(@"task1---%@",[NSThread currentThread]);
    //    }
    //解决方法:开runloop
    //1.获得子线程对应的runloop
    NSRunLoop *runloop = [NSRunLoop currentRunLoop];
    
    //保证runloop不退出,必须要有一个port或timer
    //NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:YES];
    //[runloop addTimer:timer forMode:NSDefaultRunLoopMode];
    [runloop addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
    
    //2.默认是没有开启
    [runloop run];
    
    NSLog(@"---end----");
}

-(void)task2
{
    NSLog(@"task2---%@",[NSThread currentThread]);
}
@end

2.Runloop中自动释放池的创建和释放
1)第一次创建:启动runloop
2)最后一次销毁:runloop退出的时候
/3)其他时候的创建和销毁:当runloop即将睡眠的时候销毁之前的释放池,重新创建一个新的。

相关文章

  • iOS 开发-运行循环RunLoop常驻线程(五)

    假如,我们需要在一个子线程中执行多个任务,但是,多个任务又不是连续的。这时就需要我们在开启一条子线程后,一直保持线...

  • iOS复习之RunLoop

    1、事件循环2、用户态3、核心态4、常驻线程 主要 RunLoop文章:RunLoop入门 看我就够了iOS - ...

  • Runloop理解

    Runloop:运行循环-死循环我们的应用程序在启动的时候1.开启一条线程!即主线程2.主线程为常驻线程!因为在线...

  • # iOS开发之RunLoop

    iOS开发之RunLoop 什么是RunLoop 运行循环,跑圈 其实内部就是do-while循环,在这个循环n内...

  • iOS中RunLoop和线程的关系

    RunLoop又叫运行循环,主要用来管理线程。一个线程对应一个RunLoop,一个RunLoop又有五种模式。只有...

  • iOS:RunLoop详解

    RunLoop 本质: RunLoop 本质上是一个运行循环,其作用是保持线程的生命,防止线程被销毁,日常开发中无...

  • iOS RunLoop(一)

    级别: ★★☆☆☆标签:「iOS」「RunLoop」「线程常驻」作者: 陈彬审校: QiShare团队 前言:这篇...

  • iOS 多线程面试题(NSThread+runloop实现常驻线

    NSThread+runloop实现常驻线程 NSThread在实际开发中比较常用到的场景就是去实现常驻线程。 由...

  • IOS内存管理--自动释放池的实现原理

    默认主线的运行循环(runloop)是开启的,子线程的运行循环(runloop)默认是不开启的,也就意味着子线程中...

  • 子线程的运行循环

    Runloop就是运行循环,每个线程内都会有一个运行循环.只有主线程的运行循环是默认开启的,子线程的运行循环默认是...

网友评论

    本文标题:iOS 开发-运行循环RunLoop常驻线程(五)

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