美文网首页
iOS NStimer 创建和多线程创建

iOS NStimer 创建和多线程创建

作者: 梦蕊dream | 来源:发表于2018-04-18 17:53 被阅读31次

前言:NStimer 创建有两种方式,一种是需要手动加入 RunLoop 中,另一种是默认帮你开启 RunLoop

一、手动开启 RunLoop

可以在当前线程指定哪个RunLoopMode中开启

NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(handleGraceTimer:) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

二、自动开启 RunLoop

默认开启的 RunLoop 是在主线程 NSDefaultRunLoopMode

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(time) userInfo:nil repeats:YES];

三、子线程使用 NStimer(手动开启 RunLoop)

  • 错误方法:
dispatch_queue_t queue1 = dispatch_queue_create("112", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue1, ^{
        NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(handleGraceTimer:) userInfo:nil repeats:NO];
        [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
    });

注:上述代码不会执行!!!当 NStimer在主线程里添加时,主线程的 RunLoop 是默认执行的,但是子线程的RunLoop是需要手动创建[NSRunLoop currentRunLoop] 和手动开启的[[NSRunLoop currentRunLoop] run];。上述代码只是把 NStimer 添加到子线程的RunLoop中,但并未开启当前RunLoop

  • 正确方法:
    dispatch_queue_t queue1 = dispatch_queue_create("112", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue1, ^{
        NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(time) userInfo:nil repeats:YES];
        [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
        [[NSRunLoop currentRunLoop] run];
    });

四、子线程使用 NStimer(自动开启 RunLoop)

自动开启的也要注意子线程RunLoop的创建和开启。

  • 正确方法:
dispatch_queue_t queue1 = dispatch_queue_create("112", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue1, ^{
        [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(time) userInfo:nil repeats:YES];
        [[NSRunLoop currentRunLoop] run];
    });

相关文章

  • iOS NStimer 创建和多线程创建

    前言:NStimer 创建有两种方式,一种是需要手动加入 RunLoop 中,另一种是默认帮你开启 RunLoop...

  • ios中循环引用问题

    ios中循环引用问题 NO1: NSTimer 问题:当你创建使用NSTimer的时候,NSTimer会默...

  • iOS基础知识 (三)

    多线程 多线程创建方式 iOS创建多线程方式主要有NSThread、NSOperation、GCD,这三种方式创建...

  • iOS 单例计时器(页面切换仍然计时)

    iOS 单例计时器(页面切换仍然计时)NSTimer 定时器(2)GCD 多线程(4) //–––––––––––...

  • NSTimer

    创建NSTimer 创建NSTimer的常用方法是: + (NSTimer *)scheduledTimerWit...

  • 多线程 创建和函数

    概述 创建线程3种方式: 继承并重写 Thread的run方法,然后new出来.start()即可 实现runna...

  • NSTimer

    深入NSTimer(iOS)iOS 中的 NSTimer关于NSRunLoop和NSTimer的深入理解

  • iOS NSTimer简单创建

  • 线程的创建和使用⚠️

    线程的创建和使用 ⚠️ * 多线程的创建,方式一:继承于Thread类 * 1. 创建一个继承于Thread类的子...

  • 第32课:类

    预习: class、__init__、 9.1 创建和使用类 9.1.1创建Dog类 2,在Python2.7中创...

网友评论

      本文标题:iOS NStimer 创建和多线程创建

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