美文网首页
iOS 线程保活

iOS 线程保活

作者: 无名指的情怀 | 来源:发表于2020-05-28 16:13 被阅读0次

    1、线程保活管理类.h文件

    //

    //  ZFPermenantThread.h

    //  ZFThread

    //

    //  Created by zzf on 2020/5/26.

    //  Copyright © 2020 zzf. All rights reserved.

    //

    #import

    NS_ASSUME_NONNULL_BEGIN

    @interface ZFPermenantThread : NSObject

    - (void)run;

    - (void)stop;

    - (void)executeTask:(void(^)(void))task;

    @end

    NS_ASSUME_NONNULL_END

    2、线程保活管理类.m文件

    //

    //  ZFPermenantThread.m

    //  ZFThread

    //

    //  Created by zzf on 2020/5/26.

    //  Copyright © 2020 zzf. All rights reserved.

    //

    #import "ZFPermenantThread.h"

    @interface ZFThread : NSThread

    @end

    @implementation ZFThread

    - (void)dealloc {

        NSLog(@"%s",__func__);

    }

    @end

    @interface ZFPermenantThread ()

    @property (nonatomic, strong)ZFThread *innerThread;

    @property (nonatomic, assign, getter=isStopped)BOOL stopped;

    @end

    @implementation ZFPermenantThread

    - (instancetype)init {

        if(self= [superinit]) {

            self.stopped=NO;

            __weaktypeof(self) weakSelf =self;

            self.innerThread= [[ZFThreadalloc]initWithBlock:^{

                [[NSRunLoop currentRunLoop] addPort:[[NSPort alloc]init] forMode:NSDefaultRunLoopMode];

                while(weakSelf && !weakSelf.isStopped) {

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

                }

            }];

            [self.innerThreadstart];

        }

        return self;

    }

    - (void)run{

        if(!self.innerThread) {

            return;

        }

        [self.innerThread start];

    }

    - (void)executeTask:(void(^)(void))task {

        if(!self.innerThread|| !task) {

            return;

        }

        [self performSelector:@selector(__executeTask:) onThread:self.innerThread withObject:task waitUntilDone:NO];

    }

    - (void)stop{

        if(!self.innerThread) {

            return;

        }

        [self performSelector:@selector(__stop) onThread:self.innerThread withObject:nil waitUntilDone:YES];

    }

    - (void)dealloc {

        NSLog(@"%s",__func__);

        [selfstop];

    }

    #pragma mark - private methods

    - (void)__stop{

        self.stopped=YES;

        CFRunLoopStop(CFRunLoopGetCurrent());

        self.innerThread = nil;

    }

    - (void)__executeTask:(void(^)(void))task {

        task();

    }

    @end

    3、使用调用

    //

    //  ViewController.m

    //  ZFThread

    //

    //  Created by zzf on 2020/5/26.

    //  Copyright © 2020 zzf. All rights reserved.

    //

    #import "ViewController.h"

    #import "ZFPermenantThread.h"

    @interface ViewController ()

    @property (nonatomic, strong)ZFPermenantThread *thread;

    @end

    @implementation ViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view.

        self.thread = [[ZFPermenantThread alloc] init];

    //    [self.thread run];

    }

    - (void)touchesBegan:(NSSet *)toucheswithEvent:(UIEvent*)event {

        [self.thread executeTask:^{

            NSLog(@"执行任务");

        }];

    }

    - (void)test{

    }

    - (void)stop{

        [self.threadstop];

    }

    - (void)dealloc {

    //    [self.thread stop];

    }

    @end

    结束,小记一下,毕竟好脑子不如烂笔头。。。

    相关文章

      网友评论

          本文标题:iOS 线程保活

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