文档章节

iOS开发技巧(系列十一:performSelectorOnMainThread的一些细节)

召唤攻城狮
 召唤攻城狮
发布于 2014/05/10 17:33
字数 465
阅读 567
收藏 0

在iOS编码过程中,我经常使用[self performSelectorOnMainThread:withObject:waitUntilDone]方法,这一般是在后台线程结束之后,回到主线程刷新界面,比如说你的代码可能会这样写,

[self performSelectorOnMainThread:@selector(refreshTableView) withObject:nil waitUntilDone:YES];

- (void)refreshTableView

{

    [self.tableView reloadData];

}

这样的意思就是在主线程中刷新tableView,这种写法是一个比较好的方式,但是我们有时候会有失误的时候,什么情况呢?我来说说自己的失误吧,我的代码这样写,[self performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];然后就悲剧了,这样的写法肯定会导致程序挂掉,后来我发现了错误的原因,我只是习惯性的把此reloadData当做了tableView的reloadData,所以产生了错误。我们可以这样改正,

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];(第二种写法)

这样就明确的指定了在主线程中执行self.tableView的reloadData方法了。但是我还是推荐第一种写法,即

[self performSelectorOnMainThread:@selector(refreshTableView) withObject:nil waitUntilDone:YES];

- (void)refreshTableView

{

    [self.tableView reloadData];

}

因为这样你写的代码行数多啊,说明你的工作量大啊。哈哈开玩笑的,这种写法我觉得更加直观一点吧。

任何一个NSOjbect子类都可以调用-performSelectorOnMainThread:withObject:waitUntilDone方法,比如数组对象array,可以这样调用该方法,

//下面的代码正确性我不能保证,小伙伴们可以试试看

[array performSelectorOnMainThread:@selector(removeAllObjects) withObject:nil waitUntilDone:YES];

只是没有必要,所以很少见到罢了。

我建了一个iOS交流群188647173,欢迎各位前来交流学习,分享码农经验。最近群的人数一直上不去,我甚是捉急,读者朋友们顶起啊。

© 著作权归作者所有

共有 人打赏支持
召唤攻城狮
粉丝 183
博文 53
码字总数 49671
作品 0
玉林
私信 提问
一步一步学习 iOS 6 编程(第四版)正式发布

所有范例程序及其截图都采用Xcode 4.4 和Xcode 4.5 最新版开发工具,本书包含了最新的iOS 6 开发技术,如自动布局(Auto Layout)、集合视图(Collection View)等等。 新增内容包括:分割视...

entlib
2012/10/25
0
2
iOS股票K线图、校园助手、适配iPhone X、版本检测等源码

iOS精选源码 快速创建menuItem控件 YHPhotoBrowser 优化的网络图片浏览 cocoaAsynSocket demo (包含客户端和服务端) SwipeMenuViewController现在支持iPhoneX和Swift4。 仿微信的提醒对话框 ...

sunnyaigd
2017/10/31
0
0
IOS学习,最简单的表格应用程序,学习,列出博客

IOS编程浅蓝教程,这是博客地址http://www.cnblogs.com/haichao/category/425378.html IOS编程浅蓝教程:锲子 IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备 IOS编程浅蓝教程(二) Hel...

andy521zhu
2015/01/17
0
0
Flutter完整开发实战详解(三、 打包与填坑篇)

作为系列文章的第三篇,继篇章一和篇章二之后,本篇将为你着重展示:Flutter开发过程的打包流程、APP包对比、细节技巧与问题处理。本篇主要描述的Flutter的打包、在开发过程中遇到的各类问题...

恋猫月亮
08/12
0
0
iOS 11开发教程(十一)了解iOS11应用视图

iOS 11开发教程(十一)了解iOS11应用视图 在iPhone或者iPad中,用户看到的和摸到的都是视图。视图是用户界面的重要组成元素。本节将主要讲解视图的添加、删除以及位置和大小的设置等内容。 ...

大学霸
2017/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Rainbond V5.0 Beta公测公告

Rainbond支撑企业应用的开发、架构、交付和运维的全流程,通过“无侵入”架构无缝衔接各类企业应用,底层资源可以对接和管理IaaS、虚拟机和物理服务器 Rainbond V5.0即日起开启Beta版本公测,...

好雨云帮
15分钟前
2
0
Word Pattern(leetcode290)

Given a pattern and a string str, find if str follows the same pattern. Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empt......

woshixin
21分钟前
0
0
Kubernetes 1.13.1快速升级

Kubernetes 1.13.1已经正式发布,快速升级(含国内镜像快速下载链接)包括升级kubeadm/kubectl/kubelet版本、拉取镜像、升级Kubernetes集群三个主要步骤。注意Kubernetes 1.12.3版本暂时不支...

openthings
24分钟前
2
0
多线程的实现方式

多线程是指 一个程序运行时,产生或使用了不止一个线程。 线程的生命周期是怎么样的,下面这张图我们可以看出些端倪: 这章我们主要讨论多线程实现的方式,基础知识部分我们可以下来再恶补。...

搬砖大侠
37分钟前
1
0
新人千万不要在 Windows 上使用 Ruby on Rails

标题:新人千万不要在 Windows 上使用 Ruby on Rails 副标题:鼓励新人在 Linux 和 Mac 上使用 Ruby on Rails ! 原则:要走寻常路,不要学美特斯邦伟! "在 Windows上 使用 Ruby on Rails "是...

Jason909
45分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部