博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
刷新UI耗时解决方案
阅读量:6401 次
发布时间:2019-06-23

本文共 1957 字,大约阅读时间需要 6 分钟。

hot3.png

//献上 刷新UI耗时解决方案 

//你的所有异步操作 是否操作UI时是否都会回到主线程??
//iOS 你怎么了 开发者的生态圈怎么了  哎~ 心情不好!

typedef BOOL(^RunLoopBlock)(void);@interface ViewController ()//定时器@property(nonatomic,strong) NSTimer *timer;//任务数组@property(nonatomic,strong) NSMutableArray *tasks;//最大任务数@property(nonatomic,assign) NSInteger maxQueueLength;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    _tasks = [NSMutableArray array];    _maxQueueLength = 18;    _timer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(timerMothod) userInfo:nil repeats:YES];    [self addRunLoopObserver];}- (void)timerMothod {    }+ (void)zhaodacai {    NSLog(@"zhadaocai");}- (void)touchesBegan:(NSSet
*)touches withEvent:(UIEvent *)event{ [self addTask:^BOOL{ [ViewController zhaodacai]; return YES; }];}- (void) addTask:(RunLoopBlock)unit { [self.tasks addObject:unit]; if (_tasks.count > _maxQueueLength) { [self.tasks removeObjectAtIndex:0]; }}static void CallBack (CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info){ ViewController *vc = (__bridge ViewController *)(info); if (vc.tasks.count == 0 ) { return; } BOOL result = NO; while (result == NO && vc.tasks.count) { RunLoopBlock unit = vc.tasks.firstObject; unit(); [vc.tasks removeObjectAtIndex:0]; }}//添加观察者- (void)addRunLoopObserver { CFRunLoopRef runloop = CFRunLoopGetCurrent(); CFRunLoopObserverContext context = { 0, (__bridge void *)(self), &CFRetain, &CFRelease, NULL }; CFRunLoopObserverRef defaultModelObserver; defaultModelObserver = CFRunLoopObserverCreate(NULL, kCFRunLoopBeforeWaiting, YES, NSIntegerMax - 99, &CallBack, &context); CFRunLoopAddObserver(runloop, defaultModelObserver, kCFRunLoopDefaultMode); //c语言必须释放 CFRelease(defaultModelObserver);}

 

转载于:https://my.oschina.net/zhaodacai/blog/840414

你可能感兴趣的文章
jmeter 插件下载下载方法
查看>>
BZOJ1004: [HNOI2008]Cards(Burnside引理 背包dp)
查看>>
企业建立私有云的N个理由
查看>>
python 验证码识别示例(一) 某个网站验证码识别
查看>>
关于加密(转载文章)
查看>>
浅谈tcp socket的backlog参数
查看>>
js对数值型数组排序错误
查看>>
MVC ---- 怎删改查
查看>>
怎样更聪明的工作
查看>>
【.NET 深呼吸】.net core 中的轻量级 Composition
查看>>
electron-vue 用 electron-packager 打包的问题备忘
查看>>
无人驾驶入门(基本流程)
查看>>
CentOS安装Tomcat
查看>>
[转]innodb的锁时间
查看>>
deeplearning4j——卷积神经网络对验证码进行识别
查看>>
C#获取一个实体类的属性名称、属性值
查看>>
[转]创建一个JavaScript弹出DIV窗口层的效果
查看>>
Hash表
查看>>
通过CLR API实现C++调用C#代码交互
查看>>
织梦添加模块之占位
查看>>