文档章节

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

召唤攻城狮
 召唤攻城狮
发布于 2014/05/10 17:33
字数 465
阅读 565
收藏 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,欢迎各位前来交流学习,分享码农经验。最近群的人数一直上不去,我甚是捉急,读者朋友们顶起啊。

© 著作权归作者所有

共有 人打赏支持
召唤攻城狮
粉丝 184
博文 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
Flutter完整开发实战详解(三、 打包与填坑篇)

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

恋猫月亮
08/12
0
0
IOS学习,最简单的表格应用程序,学习,列出博客

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

andy521zhu
2015/01/17
0
0
【IOS视频教学】三个月学会IOS开发

一、windows系统下安装虚拟机-mac系统-视频教程-安装件全套下载:http://www.wyzc.com/forum/56212.html 二、史上最佳0基础Swift语言视频教程下载链接:http://www.wyzc.com/forum/56744.htm...

马洪伟
2014/12/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

nginx模块学习六 add_header 跨域访问

语法 Syntax: add_header name value [always];Default: --Context:http,server,location,if in location 例:/etc/nginx/conf.d/default.conf server {    listen       80; ......

Romanceling
今天
0
0
SpringBoot初探

#SpringBoot初探 三种创建SpringBoot项目的方式: 第一种:使用IDEA创建maven项目,选择maven-archetype-quickstart; 第二种:使用IDEA创建Spring Initializer,选择web组件; 第三种:使用...

向码而生
今天
2
0
IO

JAVA中IO技术:BIO、NIO、AIO 1、同步异步、阻塞非阻塞概念 同步和异步是针对应用程序和内核的交互而言的。 阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方...

DemonsI
今天
0
0
org.apache.commons 常用工具类

一. org.apache.commons.io.IOUtils closeQuietly 关闭一个IO流、socket、或者selector且不抛出异常。通常放在finally块。 toString 转换IO流、 Uri、 byte[]为String。 copy IO流数据复制,...

sprouting
今天
0
0
linux使用Inotify监控目录或者文件状态变更

基本概念: Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。 需求: 1.有一个文件采集进程,...

mickelfeng
今天
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部