美文网首页
iOS NSThread 保活线程代码封装

iOS NSThread 保活线程代码封装

作者: 孙掌门 | 来源:发表于2020-02-19 19:20 被阅读0次

    iOS NSThread 保活线程代码封装

    //
    //  SCXThread.h
    //  blogTest
    //
    //  Created by 孙承秀 on 2020/2/19.
    //  Copyright © 2020 孙承秀. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface SCXThread : NSObject
    
    /// 开启一个线程
    - (void)run;
    
    /// 停止
    - (void)stop;
    
    /// 执行一个任务
    /// @param block 回调block
    - (void)excuteTaskWithBlock:(void(^)(void))block;
    @end
    
    NS_ASSUME_NONNULL_END
    
    
    
    //
    //  SCXThread.m
    //  blogTest
    //
    //  Created by 孙承秀 on 2020/2/19.
    //  Copyright © 2020 孙承秀. All rights reserved.
    //
    
    #import "SCXThread.h"
    
    
    
    @interface SCXNSThread : NSThread
    
    @end
    @implementation SCXNSThread
    -(void)dealloc{
        NSLog(@"%s",__func__);
    }
    @end
    
    
    
    
    @interface SCXThread ()
    @property(nonatomic,strong)SCXNSThread *thread;
    @property(nonatomic,assign)BOOL stopped;
    @end
    @implementation SCXThread
    -(instancetype)init{
        if (self = [super init]) {
            self.stopped = NO;
            __weak typeof(self)weakSelf = self;
            self.thread = [[SCXNSThread alloc] initWithBlock:^{
                [[NSRunLoop currentRunLoop] addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
                while (weakSelf && !weakSelf.stopped) {
                    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
                }
            }];
        }
        return self;
    }
    -(void)run{
        [self.thread start];
    }
    -(void)stop{
        if (!self.thread) {
            return;
        }
        [self performSelector:@selector(_stopRunloop) onThread:self.thread withObject:nil waitUntilDone:YES];
    }
    -(void)excuteTaskWithBlock:(void (^)(void))block{
        if (!self.thread || !block) {
            return;
        }
        [self performSelector:@selector(_excuteTask:) onThread:self.thread withObject:block waitUntilDone:NO];
    }
    -(void)dealloc{
        [self stop];
    }
    - (void)_stopRunloop{
        self.stopped = YES;
        CFRunLoopStop(CFRunLoopGetCurrent());
        self.thread = nil;
    }
    - (void)_excuteTask:(void (^)(void))block{
        block();
    }
    @end
    
    
    

    相关文章

      网友评论

          本文标题:iOS NSThread 保活线程代码封装

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