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

项目中有网络请求、读写操作等一系列耗时操作时,为了避免阻塞主线程,我们会把这些耗时操作放到子线程中去处理,当处理完成后,再回到主线程更新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);
    }
}

转自:http://www.jianshu.com/p/82c98bf6ef81

时间: 2024-10-01 17:35:58

iOS开发创建UI的耗时操作处理的相关文章

IOS开发-UI学习-sqlite数据库的操作

IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这两款著名的数据库都还快,在ios和安卓app中常用来完成对数据进行离线缓存的处理,如新闻数据的离线缓存. 它的基本操作步骤是: 1.先加入sqlite开发库libsqlite3.dylib, 2.新建或打开数据库, 3.创建数据表, 4.插入数据, 5.查询数据并打印, 6.关闭数据库, 具体操作步

iOS开发——创建你自己的Framework

http://www.cocoachina.com/ios/20150127/11022.html (原文:How to Create a Framework for iOS 作者:Sam Davies 译者:Mr_cyz ) 在上一篇教程(中译版)中,你学到了怎么样创建一个可复用的圆形旋钮控件.然而你可能不清楚怎样让其他开发者更方便地去复用它. 如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件.然而,这种方法并不是很优雅.它会暴露所有的实现细节,而这些实现你可能并不想开源出来.此

IOS开发用户界面UI编程视频教程

在这个拼颜值的时代,App必须要华丽丽的闪亮登场,IOS UI设计成为iOS开发中必须熟练掌握的内容,可以说iOS开发的70%以上的工作量都花在iOS UI界面上,该阶段内容包括:iOS项目程序结构.生命周期.事件周期.视图View.各种视图组件.各种视图控制器.动画等. IOS开发用户界面UI编程视频教程(某学堂出品)课程目录:01-第一个UI程序02-视图创建03-父子视图04-UILabel标签05-Frame与bounds的区别06-UIButton按钮的使用07-UIImageView

IOS开发创建开发证书及发布App应用(二)——创建证书

源于:http://www.jkqnb.com/ydkf/article/27 预览图 2. 创建证书 证书分为两种, 一种是开发者证书,主要是用来真机调试的 另一种就是发布证书,就是用来发布应用的, 最好是两种都要下载,不然编译时候可能报错,我猜想可能苹果怕你没用真机调试 创建证书分为两个步骤: 在苹果电脑生成证书签名公钥 提交证书公钥文件到开发者网站 1)  创建开发者证书  1.生成证书签名公钥 在有Mac OS X的操作系统中打开"应用程序" -- "实用工具&quo

IOS开发创建开发证书及发布App应用(一)——流程说明

源于:http://www.jkqnb.com/ydkf/article/26 描述 先说一下这个发布 编译 苹果app的流程吧1. 注册苹果开发者帐号2. 创建证书 3. 创建App ID(不是那个登录账号)4. 创建配置概要文件5. 应用编译6. 应用打包 7. 在iTunes创建填写应用基本信息8. 使用Application Loader工具上传应用9. 等待审核 1.注册苹果开发者账号注册之后一定要成为付费会员,一种99美元(标准版) 一种299美元(企业版)具体区别就百度吧,一般都是

iOS开发——高级UI&amp;带你玩转UITableView

带你玩装UITableView 在实际iOS开发中UITableView是使用最多,也是最重要的一个控件,如果你不会用它,那别说什么大神了,菜鸟都不如. 其实关于UItableView事非常简单的,实际开发中用起来却没有那么简单就是因为他结合MVC使用,涉及到了模型数据的读取,自定义View,功能的拓展和更好的解藕,下面就带你玩一遍: UITableView的两种样式 UITableViewStylePlain UITableViewStyleGroupeds accessoryType UIT

iOS开发-- 创建podspec文件,为自己的项目添加pod支持

开篇扯淡 作为一个iOS开发者,一定用过CocoaPods吧,没用过?点这儿去面壁吧 Cocoapods作为iOS开发的包管理器,给我们的开发带来了极大的便利,而且越来越多的第三方类库支持Pod,可以通过Pod傻瓜式的集成到自己的工程中,那么问题来了,我自己也有一系列的小工具类,怎么让它也支持pod集成进而让其他朋友方便,的使用呢? 刚好,最近项目不算紧,自己尝试着弄了一下,在这里记录一下尝试的过程, 一来备忘, 二来共享...... 其实网上这种文章数不胜数,但是不一定都是适合自己的,比如接下

iOS开发——高级UI—OC篇&amp;退出键盘

退出键盘 iOS开发中键盘的退出方法用很多中我们应该在合适的地方使用合适的方法才能更好的提高开发的效率和应用的性能 下面给大家介绍几种最常用的键盘退出方法,基本上iOS开发中的键盘退出方法都是这几种中的一种活着几种. 一:textView 1 //通过委托来实现放弃第一响应者 2 #pragma mark - UITextView Delegate Method 3 -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(N

IOS开发-UI学习-delegate(代理)的使用

代理是IOS开发中用到的一种设计模式.今天做了一个代理的小练习: 以下项目实现了两个页面之间的相互切换,并且在切换页面的时候完成了从一个页面往另一个页面的传值.从主页面往其他页面传值是容易的,但是反过来从其他页面往主页面传值就难了,要用到delegate设计模式. 新建一个ios的项目,然后再新建一个ViewController,起名为TwoViewController,这样,加上新建项目时默认生成的那个ViewController,总共有两个ViewController,其中新建项目默认生成的