好想用Blocks

可能是之前Windows开发惯了,做下载模块的回调的时候都是直接对回调函数进行调用的,不过这在现代语言构建的应用上,如果子线程触发了UI操作,有可能会core掉,在iPhone里特别是对UIWebView。所以不得不在所有回调方法里用performSelectorOnMainThread。但这个方法实在太烂了,首先主体要是NSObject,参数还只能有一个Object的NSObject,不能多参,而回调的时候完全可能回返id和错误码等等信息,所以就得写成数组,然后再分解,同时还要加上类型,根据类型分解数组并调用不同的回调。

 

实在太傻了所以我想找别的替代方法,搜了一下void dispatch_async(dispatch_queue_t queue, dispatch_block_t block);这个真是绝妙,首先它是异步的,第一个参数添主队列,blocks则更可以直接写一大断任意代码就可以,代码内部调多少参数都不要紧,只要别管这段代码的返回值,也不能对这段代码传参。看得我眉开眼笑,可惜再看下要求,Mac要10.6,iPhone要3.2,虽然应用程序确实将不会考虑过老的iOS,但目前的测试机是个很老的iPhone2代,iOS是3.1.2还是3.1.3的,那么一切都安静了。。。

 

要是能写这样的代码,真是今晚做梦都会笑

dispatch_async(dispatch_get_main_queue(), ^{
        [label setText:@"xixi"];
        [sw setOn:NO];
    });

你可能感兴趣的:(多线程,ios,UI,windows)