performSelectorOnMainThread (线程)

原创 2012年03月29日 14:21:46



[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(refresh) withObject:nil waitUntilDone:NO];



ios多线程之performSelectorOnMainThread

+ detachNewThreadSelector:toTarget:withObject: 和 - performSelectorInBackground:withObject: 的效果基本一致,如...
  • yuanya
  • yuanya
  • 2013年06月21日 09:25
  • 1398

iOS: 学习笔记, 使用performSelectorOnMainThread及时刷新UIImageView

iOS: 学习笔记, 使用performSelectorOnMainThread及时刷新UIImageView

iOS中performSelectorOnMainThread刷新图片

在iOS中, 界面刷新在主线程中进行, 这导致NSURLSession远程下载图片使用UIImageView直接设置Image并不能及时刷新界面. 下面的代码演示了如何使用 performSelect...

performSelectorOnMainThread 和detachNewThreadSelector区别.

举例说明怎么简单的创建一个子线程。 用到的类是NSThread类,这里使用detachNewTheadSelector:toTagaet:withObject创建一个线程。 函数setupThre...

C#-WinForm跨线程修改UI界面的实例

  • 2017年11月14日 18:04
  • 47KB
  • 下载

Java线程:新特征-线程池

Java线程:新特征-线程池   Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带...

Java线程系列实用教程

  • 2017年12月02日 09:59
  • 158KB
  • 下载

嵌入式实习-day5-线程

  • 2017年11月20日 10:47
  • 584KB
  • 下载

运行不息的内核线程kthread

http://blog.csdn.net/qb_2008/article/details/6835783 上节中,我们成功地编译运行了一个linux模块。可惜的是,它只有两个函数,hello_i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:performSelectorOnMainThread (线程)
举报原因:
原因补充:

(最多只允许输入30个字)