美文网首页
iOS开发创建UI的耗时操作处理

iOS开发创建UI的耗时操作处理

作者: 搬运工开发者 | 来源:发表于2016-11-28 17:43 被阅读1509次

项目中有网络请求、读写操作等一系列耗时操作时,为了避免阻塞主线程,我们会把这些耗时操作放到子线程中去处理,当处理完成后,再回到主线程更新UI,这样就不会阻塞主线程。但是创建UI的时候一般都是在主线程中执行,如果需要创建的UI控件比较多的时候,可能会发生很不友好的卡顿现象,体验很差,比如当push到某一个ViewController中,由于项目需求,该ViewController中创建了比较多的view及view子类,页面在跳转的时候,会发生很不友好的卡顿现象。
这时候比较简单的方法就是直接使用

[self performSelector:(nonnull SEL) withObject:(nullable id) afterDelay:(NSTimeInterval) inModes:(nonnull NSArray<NSString *> *)];

这个方法共有四个参数,第一个参数可以理解为要调用的方法名字;第二个参数表示要调用的方法所携带的参数(若无参,传nil即可);第三个参数表示延迟多少秒执行(若不要延迟执行传0.0即可);最后一个参数是一个数组,数组中的元素为RunLoop的mode(NSDefaultRunLoopMode和NSRunLoopCommonModes)。

- (void)viewDidLoad {
    [super viewDidLoad];
    [self performSelector:@selector(setupUI) withObject:nil afterDelay:0.0f inModes:@[NSRunLoopCommonModes]];
}
//这段代码是在当前线程中使用给定的具体的Runloop mode来执行并不一定是在主线程中执行。如果想要确保在主线程中执行, 可以使用
//performSelectorOnMainThread:withObject:waitUntilDone:或者
//performSelectorOnMainThread:withObject:waitUntilDone:modes:来代替
- (void)setupUI {
    //阻塞主线程的UI操作可放到这里执行
    for (int i=0; i<10000; i++) {
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, i*2+10, 5, 5)];
        view.backgroundColor = [UIColor redColor];
        [self.view addSubview:view];
        NSLog(@"耗时UI操作");
        NSLog(@"%@", view);
    }
}

相关文章

  • iOS开发创建UI的耗时操作处理

    项目中有网络请求、读写操作等一系列耗时操作时,为了避免阻塞主线程,我们会把这些耗时操作放到子线程中去处理,当处理完...

  • Android异步任务实现详解

    在Android开发中,主线程(UI线程)不能执行耗时的操作,通常将一些耗时的操作使用异步任务的方式进行处理,简单...

  • 多线程之一

    处理耗时操作:不使用多线程 在iOS开发中,经常会遇到一些耗时操作,如果不使用多线程,将耗时操作放在主线程中,将会...

  • 无标题文章

    --如何处理android多线程安全不要堵塞UI线程,不在主线程中做耗时操作的处理,可以开启子线程去执行耗时操作 ...

  • handler消息处理机制

    handler主要用来发送消息,处理消息的。一般用于耗时操作,如更新ui 1.在主线程中创建handler对象, ...

  • Android-异步操作更新UI界面的几种方法

    在Android开发中,耗时操作是比较多的,更新ui需要在主线程中,然而耗时操作是不能放在主UI线程中在执行的,因...

  • 「Android 学习计划」之线程池

    前言 由于 Android 系统不能在 UI 线程进行耗时的操作,通常我们会在子线程处理耗时操作。简单的写法就是就...

  • iOS多线程之GCD的使用

    在iOS开发中,所有的UI操作都是在主线程中进行的,那么如果将把耗时操作也放在主线程中,就会造成页面卡顿的现象。因...

  • 多线程之NSOperation简介

    在iOS开发中,为了提升用户体验,我们通常会将操作耗时的操作放在主线程之外的线程进行处理。对于正常的简单操作,我们...

  • Android--多线程处理

    在Android中,UI线程(主线程)处理UI操作,工作线程处理耗时任务。下面列举4中多线程方式: Handler...

网友评论

      本文标题:iOS开发创建UI的耗时操作处理

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