美文网首页
iOS 分线程与线程维活

iOS 分线程与线程维活

作者: 前行的骆驼 | 来源:发表于2021-05-06 10:06 被阅读0次

    NSThread(分线程):提高应用程序的运行效率

    开辟多线程的要点:

    1.同一时间,CPU只能处理一条线程,即同一时间只能执行一个程序顺序流;

    2.多线程是并发(同时)执行任务,其实是CPU在不同线程间的快速切换;

    3.线程过多会导致CPU调度频次提高,导致CPU资源大量消耗,使CPU大量损耗(一般不超过5条);

    分线程:相互不影响,分开执行,独立存在的线程

    注意:

    1.不能在分线程中刷新UI控件;

    2.在分线程中创建定时器只会执行循环一次,需打开该线程的runLoop才能循环执行;

    开辟分线程的方式:1.NSThread;2.GCD(C语言方法);3.NSOperation(操作队列)

    分线程生命周期:由线程代码决定

    开辟线程NSThread方法:

    创建分线程的方式一:

    NSThread * thread = [[NSThread alloc]initWithTarget:self selector:@selector(threadRun) object:nil];

    [thread start];

    创建分线程的方式二:

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

    创建分线程的方式三:(隐式开辟)

    [self performSelectorInBackground:@selector(threadRun) withObject:nil];

    线程休眠:[NSThread sleepForTimeInterval:休眠时间];

    回到主线程:[self performSelectorOnMainThread:主线程执行方法 withObject:nil waitUntilDone:YES];

    线程退出:[NSThread exit];

    线程标记:- (void)cancel 该方法标记当前线程的isCancel属性的状态并调用该属性

    线程维活:

    分线程由于是临时调用,在结束分配给它的任务后,就会进入休眠,再次使用,需要再次请求并开启新的线程,在实际开发中,往往会在分线程执行一些不定时的经常性任务,这样频繁开启分线程,就会损耗手机性能,这时候我们可以维持一个固定的分线程用来执行这一系列任务。

    我们可以在分线程的方法中循环调用NSRunLoop以维持活性,NSRunLoop不消耗系统性能也不会占用线程

    - (void)threadRun {

        while(YES) {

                    [[NSRunLoop currentRunLoop]runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];

                } 

    }

    当我们需要执行任务的时候可以用performSelector:onThread:withObject:waitUntilDone:方法来调用线程

    [self performSelector:@selector(performEvent) onThread:thread withObject:nil waitUntilDone:NO];

    - (void)performEvent {

    //执行事件

    }

    相关文章

      网友评论

          本文标题:iOS 分线程与线程维活

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