在delegate中同步请求网络,结果阻塞了。
请教各位大神,delegate方法到底是在主线程还是非主线程执行的?
请教各位大神,delegate方法到底是在主线程还是非主线程执行的?

1 qdvictory Mar 10, 2014 和这个没关系。UI必须在主线程更新。 |
2 androidBrant OP @qdvictory e 我是说我在delegate中同步请求网络,结果把ui阻塞了。。。 |
3 offspring Mar 10, 2014 你想让它在主线程它就在主线程 你不想让它在主线程 它就不在主线程 |
4 alexrezit Mar 10, 2014 你让它在哪儿就在哪儿. |
5 damngood Mar 10, 2014 不仅仅是 UI 才有 delegate 如果你指的是 XXView 的 delegate 的话, 那么一般来说是在 main thread 上执行的, 毕竟一般来说不会在 view 外部直接调用 delegate 方法, 而是在 main thread 对 view 做了某某操作导致 delegate 方法的调用. |
6 l6751902 Mar 10, 2014 这个你可以自己抄作, 看具体实现啦 |
7 androidBrant OP |
8 androidBrant OP |
9 txx Mar 10, 2014 @androidBrant 你自己 log 一下 当前是不是主线程 不就完了么....与其来问不如自己检验.. |
10 soulgain Mar 10, 2014 这个问题问的是不明确,这个delegate是那个类的,是你自己写的还是什么。 如果说你那个网络类用的是NSURLConnection,那他的delegate是会在主线程执行的,so你在那个delegate里面调用同步的方法,确实会阻塞。 |
12 alexrezit Mar 10, 2014 via iPad @androidBrant 原来在哪个线程还在哪个线程. |
15 l6751902 Mar 10, 2014 设置代理后,代理的内容由你指定的对象来执行 其实写成代码就是这么个感觉: class object { objectDlg *delegate funtion do(){ self.delegate() } } object *_object = [[object alloc]init]; _object.delegate = foo //相当于用你的方法替换掉原来对象自己的方法 _object.do()//这句展开就是 do(){ self.foo()} 相当于那个对象会在某个时候调用你写的方法, 要么那个对象处于异步方法中。 要不他的执行代理时用异步方法来执行。 如果看不到源码需要你去试一下。 那如果对象本身是同步的,但你在回调中不希望主线程阻塞,那么需要在回调中使用异步方法。 |
16 l6751902 Mar 10, 2014 好久没写代码了。。。当伪代码看吧。。把objc和py的格式搞混了 |
17 androidBrant OP @txx thx 偶尔犯傻,已验证,代理是在主线程中执行的。。 |
18 androidBrant OP @l6751902 嗯,应该是看委托对象是在哪个线程 |
20 kingme Mar 10, 2014 有一种撞头像的感觉,,, |
21 androidBrant OP @kingme 擦 |
22 krafttuc Mar 10, 2014 你在哪个线程给delegate发消息,delegate的方法就在哪个线程执行。 |
23 sharpnk Mar 10, 2014 "在delegate中同步请求网络" - 我觉得你应该考虑一下你的设计。用代理的目的就是给异步执行操作时间长的request用的,你在callback中做network request完全是与设计初衷背道而驰了。 |