mirror of
https://github.com/DKJone/DKWechatHelper.git
synced 2025-05-26 04:49:16 +08:00
78 lines
2.1 KiB
Objective-C
78 lines
2.1 KiB
Objective-C
// QGAnimatedImageDecodeThreadPool.m
|
|
// Tencent is pleased to support the open source community by making vap available.
|
|
//
|
|
// Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved.
|
|
//
|
|
// Licensed under the MIT License (the "License"); you may not use this file except in
|
|
// compliance with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://opensource.org/licenses/MIT
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software distributed under the License is
|
|
// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
|
// either express or implied. See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#import "QGAnimatedImageDecodeThreadPool.h"
|
|
#import "QGAnimatedImageDecodeThread.h"
|
|
#import "QGVAPSafeMutableArray.h"
|
|
|
|
@interface QGAnimatedImageDecodeThreadPool (){
|
|
|
|
NSMutableArray *_threads;
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation QGAnimatedImageDecodeThreadPool
|
|
|
|
+ (instancetype)sharedPool {
|
|
|
|
static QGAnimatedImageDecodeThreadPool *instance;
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^{
|
|
instance = [[QGAnimatedImageDecodeThreadPool alloc] init];
|
|
});
|
|
return instance;
|
|
}
|
|
|
|
- (instancetype)init {
|
|
|
|
if (self = [super init]) {
|
|
_threads = [QGVAPSafeMutableArray new];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
/**
|
|
从池子中找出没被占用的线程,如果没有则新建一个
|
|
|
|
@return 解码线程
|
|
*/
|
|
- (QGAnimatedImageDecodeThread *)getDecodeThread {
|
|
|
|
QGAnimatedImageDecodeThread *freeThread = nil;
|
|
for (QGAnimatedImageDecodeThread *thread in _threads) {
|
|
if (!thread.occupied) {
|
|
freeThread = thread;
|
|
}
|
|
}
|
|
if (!freeThread) {
|
|
freeThread = [[QGAnimatedImageDecodeThread alloc] initWithTarget:self selector:@selector(run) object:nil];
|
|
[freeThread start];
|
|
[_threads addObject:freeThread];
|
|
}
|
|
return freeThread;
|
|
}
|
|
|
|
- (void)run{
|
|
//线程保活
|
|
@autoreleasepool {
|
|
[[NSRunLoop currentRunLoop] addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
|
|
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
|
|
[runLoop run];
|
|
}
|
|
}
|
|
|
|
@end
|