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

iOS 常驻线程如何创建

作者: iOS开发 | 来源:发表于2019-04-09 09:52 被阅读0次

    @interface ViewController ()

    @property (nonatomic,strong) NSThread *thread;

    @end

    @implementation ViewController

    -(void)viewDidLoad{

        [super viewDidLoad];

        self.view.backgroundColor = [UIColor whiteColor];

        //获取这个常驻内存的线程

        self.thread=  [ViewController longTermThread];

    }

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

        //在该线程上提交任务

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

    }

    -(void)test{

        NSLog(@"test");

        NSLog(@"%@",[NSThread currentThread]);

    }

    + (void)entryPoint

    {

        //设置当前线程名为MyThread

        [[NSThread currentThread] setName:@"MyThread"];

        //获取NSRunLoop对象,第一次获取不存在时系统会创建一个

        NSRunLoop*runloop = [NSRunLoopcurrentRunLoop];

        /*

         添加一个Source1事件的监听端口

         RunLoop对象会一直监听这个端口,由于这个端口不会有任何事件到来所以不会产生影响

         监听模式是默认模式,可以修改为Common

         */

        [runloopaddPort:[NSPort port] forMode:NSDefaultRunLoopMode];

        //启动RunLoop

        [runlooprun];

    }

    + (NSThread*)longTermThread

    {

        //静态变量保存常驻内存的线程对象

        staticNSThread*longTermThread =nil;

        //使用GCD dispatch_once 在应用生命周期只执行一次常驻线程的创建工作

        staticdispatch_once_tonceToken;

        dispatch_once(&onceToken, ^{

            //创建一个线程对象,并执行entryPoint方法

            longTermThread = [[NSThreadalloc]initWithTarget:selfselector:@selector(entryPoint)object:nil];

            //启动线程,启动后就会执行entryPoint方法

            [longTermThreadstart];

        });

        returnlongTermThread;

    }

    @end

    相关文章

      网友评论

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

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