performselectoronmainthread

摘要:
}在多线程操作中,有一个著名的错误,名为“试图从除webthread的主线程之外的线程中对象weblock。这可能是调用UIKitfromasecondarthread的结果”。一旦发生此错误,程序将立即崩溃。这是因为苹果不允许程序员在主线程以外的线程中操作ui(Bug?当时,NSOperation用于发出http异步请求,然后使用kvo模式注册观察者。当下载数据时,在主线程中收到下载通知,并使用[tableviewreloadData]更新ui在observeValueForKeyPath方法中。

 

 

[selfperformSelectorOnMainThread:@selector(fetchedData:) withObject:datawaitUntilDone:YES];

会创建一个新的线程实行fetchedData函数,并传入参数data,并且会等待函数退出后再继续执行。

- (void)fetchedData:(NSData *)responseData {

。。。

}

 

在多线程操作中,有一个著名的错误,叫做“Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread”,一旦出现这个错误,程序会立即crashed。

这是由于,apple不允许程序员在主线程以外的线程中对ui进行操作(Bug?)

而笔者在一次http异步操作中也出现过这个错误。当时使用了NSOperation进行了http异步请求,然后使用kvo模式注册观察者,当数据下载完毕后,在主线程中接收下载完毕的通知,并在observeValueForKeyPath方法中使用[tableview reloadData]更新UI。

这样也导致了上述错误。

解决的方法是使用performSelectorOnMainThread进行ui的更新:

[self performSelectorOnMainThread:@selector(refreshwithObject:nil waitUntilDone:NO];

免责声明:文章转载自《performselectoronmainthread》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇无法访问共享解决方案之一iphone开发多线程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python基础:多进程、多线程

一、定义和区别 1、一个任务就是一个进程,进程就是资源的集合。比如打开浏览器,启动一个进程。当一个进程需要干很多事的时候,就需要执行多个子任务,这些子任务就是线程。 2、线程是包含在进程中的,每个进程至少有一个默认的线程(主线程),可以有多个线程 3、进程默认有个主线程。而其他子线程则是由主线程启动的。 4、通过线程运行的函数无法return值,如果需要函数...

进程与线程

什么是进程?计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据。它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期。进程(有时被称为重量级进程)是程序的一次执行。每个进程都有自己的地址空间,内存,数据栈以及其它记录其运行轨迹的辅助数据。操作系统管理在其上运行的所有进程,并为这些进程公平地分配时间。什么是线程?线程(有时被称为轻量级进程...

Python 并发编程:PoolExecutor 篇

个人笔记,如有疏漏,还请指正。 使用多线程(threading)和多进程(multiprocessing)完成常规的并发需求,在启动的时候 start、join 等步骤不能省,复杂的需要还要用 1-2 个队列。随着需求越来越复杂,如果没有良好的设计和抽象这部分的功能层次,代码量越多调试的难度就越大。 对于需要并发执行、但是对实时性要求不高的任务,我们可以...

python3.6_多线程和多进程

1.多线程 #多线程实例 from time importsleep,ctime importthreading #多个函数 deftalk(content,loop): for x inrange(loop): print('Start talk:%s %s' %(content,ctime())) sleep...

【腾讯bugly干货分享】精神哥手把手教你怎样智斗ANR

上帝说要有ANR,于是Bugly就有了ANR上报。那么ANR究竟是什么? 近期非常多童鞋问起精神哥ANR的问题,那么这次就来聊一下,鸡爪怎么泡才好吃。噢不,是怎样高速定位ANR。 ANR是什么 简单说,通常就是App执行的时候,duang~卡住了。怎么搞都动不了。 当卡住超过一定时间。Android系统觉得这就是一次“ANR(...

深入浅出java IO模型

一、同步和异步 同步:一个事件或者任务的执行,会使整个流程暂时等待,也就是说如果有多个任务要执行,必须要逐个进行。 异步:一个事件或者任务的执行,不会使整个流程暂时等待,也就是说如果有多个任务要执行,可以并发去执行。 同步和异步的关键在于一个事件或者任务的执行是否会导致整个流程暂时等待。也就是任务是逐个完成的吗 二、阻塞和非阻塞 阻塞:在某个事件或者任务执行...