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];



performSelector的原理以及用法

一、performSelector调用和直接调用区别 下面两段代码都在主线程中运行,我们在看别人代码时会发现有时会直接调用,有时会利用performSelector调用,今天看到有人在问这个问题,我...
  • libaineu2004
  • libaineu2004
  • 2015年05月20日 18:48
  • 13839

performSelectorOnMainThread支持多个参数

iOS 的 NSObject对象提供了一种在不同线程中执行其方法的机制。 最常见的是需要在主线程即UI线程中去执行一些方法 performSelectOnMainThread:withObje...
  • zjwfisheep
  • zjwfisheep
  • 2013年06月23日 14:45
  • 2939

performSelectorOnMainThread线程的阻塞与非阻塞

在做项目中,要提高效率,就必须使用多线程。 多线程,在网上搜索,有很多方法使用。 今天,接触到了performSelectorOnMainThread 方法。 NSAutoreleasePool ...
  • yuanya
  • yuanya
  • 2013年10月25日 16:10
  • 1425

[iOS] performSelectorOnMainThread支持多个参数

iOS 的 NSObject对象提供了一种在不同线程中执行其方法的机制。 最常见的是需要在主线程即UI线程中去执行一些方法 performSelectOnMainThread:withObje...
  • onlyou930
  • onlyou930
  • 2012年04月11日 13:11
  • 7160

ios更新UI时请尝试使用performSelectorOnMainThread方法

最近开发项目时发现联网获取到数据后,使用通知方式让列表刷新会存在死机的问题。 经过上网查找很多文章,都建议使用异步更新的方式,可是依然崩溃。 最后尝试使用performSelectorOn...
  • th_gsb
  • th_gsb
  • 2015年06月26日 16:56
  • 5436

多线程的使用(1) - performSelectorOnMainThread

在做项目中,要提高效率,就必须使用多线程。 多线程,在网上搜索,有很多方法使用。 今天,接触到了performSelectorOnMainThread 方法。 NSAutoreleasePool...
  • sirodeng
  • sirodeng
  • 2013年05月23日 22:53
  • 7721

iOS: performSelectorOnMainThread waitUntilDone 参数详解

http://www.41443.com/HTML/iphone/20150126/300050.html iOS 中performSelectorOnMainThread  参数 waitUnti...
  • jeffasd
  • jeffasd
  • 2016年05月17日 15:16
  • 1573

performSelectorOnMainThread:withObject: waitUntilDone 参数解释

performSelectorOnMainThread: withObject: waitUntilDone: 前两个参数不解释,最后一个waitUntilDone我看网上很多朋友都在问,解释一下。 ...
  • hhcncx
  • hhcncx
  • 2016年03月05日 17:45
  • 496

performSelectorOnMainThread:withObject: waitUntilDone 用法

[self performSelectorOnMainThread:@selector(callBack) withObject:nil waitUntilDone:YES]; waitUnti...
  • sbvfhp
  • sbvfhp
  • 2014年03月11日 14:15
  • 2963

IOS线程的使用 performSelectorOnMainThread

·使用线程可以把占据时间长的程序中的任务放到后台去处理 ·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 ·程序的运行速度可能加快 ·...
  • harryptter
  • harryptter
  • 2014年11月29日 00:02
  • 357
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:performSelectorOnMainThread (线程)
举报原因:
原因补充:

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