美文网首页
iOS 创建常驻线程

iOS 创建常驻线程

作者: 郭小弟 | 来源:发表于2018-04-03 17:08 被阅读36次
最近看了一些关于常驻线程的文章,发现了一些问题,写此文章记录一下,如果有写的不对的地方,欢迎大神指出...
常驻线程 : 要求子线程一直保活状态,随时待命,指定任务在这个长期保活的线程上执行

废话不多说了,直接上代码

@property (nonatomic, strong) NSThread *thread;
@property (nonatomic, assign) BOOL runloopLife;
- (void)viewDidLoad {
    [super viewDidLoad];
    self.runloopLife = YES;
    self.thread = [[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];
    [self.thread start];
}
- (void)test{
    //添加Port 实时监听
    [[NSRunLoop currentRunLoop] addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
    //添加runloop
    [[NSRunLoop currentRunLoop]run];
}
- (void)run{
    
    NSLog(@"%@ %s",[NSThread currentThread],__func__);
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self performSelector:@selector(run) onThread:self.thread withObject:nil waitUntilDone:NO];
}

控制台输出:

image.png
这样就说明,self.thread是保活了的,但是还是有问题的,如果现在控制器被pop的时候,控制器并没有销毁,说明是有内存泄漏的,修改代码如下:
- (void)test{

    [[NSRunLoop currentRunLoop]addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
    while (self.runloopLife) {
    [[NSRunLoop currentRunLoop]runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.3]];
    }
}
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    self.runloopLife = NO;
}
- (BOOL)runMode:(NSRunLoopMode)mode beforeDate:(NSDate *)limitDate;
这个方法官方是这样说的:如果没有输入源连接到运行循环,此方法立即退出,并返回NO,否则,在处理第一个输入源或达到limitDate后返回,如果手动从运行循环中删除所有已知的输入源和定时器并不能保证运行循环会立即退出,如果运行循环运行并处理输入源或达到了指定的超时值,则为YES;否则,如果运行循环无法启动,则为NO

如果大家还有别的好的建议请留言,欢迎大家交流

相关文章

  • iOS 创建常驻线程

    最近看了一些关于常驻线程的文章,发现了一些问题,写此文章记录一下,如果有写的不对的地方,欢迎大神指出... 常驻线...

  • iOS 创建常驻线程

    iOS中默认就有个主线程即mainThread,我们的UI线程指的就是主线程,一般都是在主线程中操作UI,从某个角...

  • iOS 常驻线程如何创建

    @interface ViewController () @property (nonatomic,strong)...

  • 转的gcd学习

    iOS开发中,多线程应用方式一般有如下几种 1 比较高层的,封装好的API:NSThread。用来创建非常驻线程以...

  • 线程常驻内存

    iOS开发中,新创建的线程,执行完成后会销毁,如何让线程常驻内存 使用场景 随时监听某些状态改变,如监听网络状态

  • iOS:常驻线程

    常驻线程基本的思路都是等待信号>收到信号>执行回调>继续等待信号,在项目开发中需要将一些耗时的,不紧要的任务放到常...

  • iOS 常驻线程

    1.创建子线程并开启线程2.给当前runloop添加port并运行runloop3.将新任务添加到已休眠的线程

  • iOS 常驻线程

    开启线程需要占用一定的内存空间(默认的情况下,主线程占1M,子线程占用512KB)且每次开辟子线程都会消耗CPU。...

  • RunLoop开辟常驻线程

    runLoop创建一个常驻线程,多次用到子线程去处理事件,避免频繁的创建,销毁线程,每条线程都有一个RunLoop...

  • iOS RunLoop(一)

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

网友评论

      本文标题:iOS 创建常驻线程

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