1、对上一篇的内容进行封装设计
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface MyThread : NSObject
- (void)run;
- (void)stop;
- (void)excuteTaskWithTarget:(id)target action:(SEL)action object:(id)object;
- (void)excuteTask:(void (^)(void))Task;
@end
NS_ASSUME_NONNULL_END
#import "MyThread.h"
@interface PrivateThread : NSThread
@end
@implementation PrivateThread
- (void)dealloc {
NSLog(@"%s",__func__);
}
@end
//-----------分割线--------------//
@interface MyThread()
@property (strong, nonatomic) PrivateThread *priThread;
@property (assign, nonatomic) BOOL isStop;
@end
@implementation MyThread
#pragma mark -- public Methods
- (instancetype)init {
if (self = [super init]) {
self.isStop = NO;
__weak typeof(self) weakSelf = self;
self.priThread = [[PrivateThread alloc] initWithBlock:^{
[[NSRunLoop currentRunLoop] addPort:[[NSPort alloc] init] forMode:NSDefaultRunLoopMode];
while (weakSelf && !weakSelf.isStop) {
NSLog(@"1---1");
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
}];
}
return self;
}
- (void)run {
if (!self.priThread) {
return;
}
[self.priThread start];
}
- (void)excuteTaskWithTarget:(id)target action:(SEL)action object:(id)object {
if (!self.priThread) {
return;
}
[target performSelector:action onThread:self.priThread withObject:object waitUntilDone:NO];
}
- (void)excuteTask:(void (^)(void))Task {
if (!self.priThread || !Task) {
return;
}
[self performSelector:@selector(innerExcuteTask:) onThread:self.priThread withObject:Task waitUntilDone:NO];
}
- (void)stop {
if (!self.priThread) {
return;
}
[self performSelector:@selector(innerStop) onThread:self.priThread withObject:nil waitUntilDone:YES];
}
- (void)dealloc {
[self stop];
}
#pragma mark -- private Methods
- (void)innerStop {
NSLog(@"innerStop");
self.isStop = YES;
CFRunLoopStop(CFRunLoopGetCurrent());
self.priThread = nil;
}
- (void)innerExcuteTask: (void (^)(void))task {
task();
}
@end