多线程中不执行delegate方法的原因

如果我们将NSURLConnection放在线程中,是不是delegate方法总是不会触发?原因就是由于线程结束了。解决方法就是让线程在数据返回之前不结束。

1。可以在线程中加一个timer防止结束, 这方法很傻

2。可以把NSURLConnection实例放在线程中的runloop中,如下面的代码,在NSOperator的start方法中将其加入runloop


RunLoop就是一个事件循环,用来不停地调度工作,以及处理输入事件,一个RunLoop可以保持一个线程一直为活跃状态,不会马上销毁掉。

  1. dispatch_queue_t queue=dispatch_queue_create("bookDetail",NULL);

        //创建异步线程

        dispatch_async(queue, ^{

            [selfinitRequest];

            [[NSRunLoopcurrentRunLoop] run];

        });



3。防止线程结束

  1. while(!isFinished) { [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; }  



其原因都是让runloop一直处于工作状态。

你可能感兴趣的:(多线程,ios,线程,delegate,实例)