Skip to content

监听主线程 runloop,当即将进入休眠时,进行任务分发。

License

Notifications You must be signed in to change notification settings

YongbaoWang/EVTaskDispatch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EVTaskDispatch

基于 CFRunLoopRef 的一款任务分发组件

  • 内部原理: 监控主线程 runloop,当即将休眠时,取出一个之前添加的任务,并在主线程执行;
  • 适用场景: 占用主线程时间过长、且可以延迟执行的任务;例如:在App启动时,一些三方库的注册、用户信息的同步;在UI列表快速滑动时,延迟执行一些加载任务;UI列表中,在主线程空闲时,提前计算Cell高度等;

Install with cocoapods

pod 'EVTaskDispatch', '~> 0.0.1'

API

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

//任务优先级
typedef enum : NSUInteger {
    EVTaskPriorityLow,
    EVTaskPriorityNormal,
    EVTaskPriorityHigh,
} EVTaskPriority;

/*
 任务派遣类
 适用场景: 占用主线程时间过长、且可以延迟执行的任务;例如:在App启动时,一些三方库的注册、用户信息的同步 等;
 内部原理: 监控主线程 runloop,当即将休眠时,取出一个之前添加的任务,并在主线程执行;
 */

@interface EVTaskDispatch : NSObject

+ (instancetype)shared;

/**
 添加任务

 @param target 对象
 @param action 方法
 @param priority 优先级
 
 对于相同的任务,只会添加一次
 */
- (void)addTaskWithTarget:(NSObject *)target action:(SEL)action priority:(EVTaskPriority)priority;

/**
 是否包含某项任务

 @param target 对象
 @param action 方法
 @param result 是否包含该任务回调
 */
- (void)containsTaskWithTarget:(NSObject *)target action:(SEL)action result:(void(^)(BOOL isContains))result;

@end

NS_ASSUME_NONNULL_END

微信公众号 :汪汪的世界

(WeChat)

About

监听主线程 runloop,当即将进入休眠时,进行任务分发。

Resources

License

Stars

Watchers

Forks

Packages

No packages published