iOS RunLoop


一个RunLoop就是一个事件处理的循环,用来不停的调度工作以及处理输入事件。使用runloop的目的是让你的线程在有工作的时候忙于工作,而没工作的时候处于休眠状态。runloop的设计是为了减少cpu无谓的空转。

1.本质:死循环,保证程序不会退出

2.runloop会监听所有的事件

3.没有事件的时候,休眠状态

4.当有事件发生,会立即响应事件

runloop可以监听的事件:UI的事件,代理的回调方法,定时器的回调方法

:在子线程里面的runloop需要自己

创建runloop对象


runloop和线程的关系

1.主线程的runloop默认是起动的

2.对其他线程来说,runloop默认是没有启动的,如果你需要更多的线程交互则可以手动配置和启动,如果线程只是去执行一个长时间的已确定的任务则不需要。

3.在任何一个线程中,都可以通过NSRunLoop *runloop = [NSRunLoop currentRunLoop];来获取当前线程的runloop



int touch = 0;

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    Person *p = [[Person alloc] init];

//    p.personDeleage = self;

    [p eat];

    


    

    

   [NSThread detachNewThreadSelector:@selector(thread:) toTarget:self withObject:nil];

    

}


// 子线程中需要自己加runloop

- (void) thread:(id)sender {

    NSLog(@"我在子线程中");

   NSTimer *t = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timer1) userInfo:nil repeats:YES];

    NSRunLoop *runLoop = [NSRunLoop currentRunLoop];

    [runLoop addTimer:t forMode:NSDefaultRunLoopMode];

    [runLoop run];

}


// delegate回调中

-(void)personEat {

    

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

}



// ui事件

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    NSLog(@"触摸屏幕");

//    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timer1) userInfo:nil repeats:YES];

}

- (IBAction)buttonAction:(id)sender {

    touch = 1;

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

}


- (void)timer1 {

    NSLog(@"111");

//    if (touch == 1) {

//        [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(timer2) userInfo:nil repeats:YES];

//    }

}

- (void)timer2 {

    NSLog(@"222");

}


@end









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值