1

Http通信によるコンテンツダウンロード機能を持つiPhoneアプリをバージョンアップ中です。iOS 4 では、イベントはメイン スレッドで発生し、NSURLConnectionDelegate 関数は別のスレッドで呼び出されていました。しかし、iOS 5 で同じコードをテストしたところ、NSURLConnectionDelegate 関数がメイン スレッドで呼び出されていることがわかりました。

NSURLConnection sendSynchronousRequest:は使用しませんでしたが、initWithRequest:を使用しました。

Apple は iOS 5 で NSURLConnection のこの部分をアップグレードしましたか?

4

2 に答える 2

0

NSURLConnectioniOS 5にはいくつかの新しいメソッドがあります。たとえばsendAsynchronousRequest: ...、そうです、彼らは何らかの方法でそれを更新しました。

それを修正するには、

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait

デリゲートメソッドで、または単に適切なキューにディスパッチします。

ドキュメントの状態:

このメソッドを呼び出す前に実行ループまたは操作キューで接続をスケジュールしない場合、接続はデフォルトモードの現在の実行ループでスケジュールされます。

どのスレッド-startで接続しましたか?

通話でラップ[connection startImmediately:YES]してみてください。dispatch_async(myThreadQueue ...)

于 2012-02-27T08:34:19.470 に答える
-1

に渡すYESstartImmediately、現在の実行ループでデリゲート メソッドが呼び出されます。メインスレッドからこれを行う場合、それがメインの実行ループです。

ただし、単純にリクエストNOを手動で渡した場合start、デリゲート メソッドは別のスレッド (メイン スレッドではない) で実行されます。

于 2013-03-14T17:35:24.977 に答える