要求によって、http requestに非同期と同期の二つ方式を選択する場合がよくある。
- 同期
UITheadに使う時、connectionWithRequest或はstartを使えば、問題なく送信ができる。
非UIThreadの場合、sendSynchronousRequest或はperformOnMainThread:selector(実はsendSynchronousRequestと同じだと思う)を使う、効果としてはUIThreadに実行していると同じ。
- 非同期
ここは注意するところ。
一般的に、NSURLConnectionを使用する場合、protocolをimplementする必要がある。なので、そのprotocolに従って定義したmethodを実行するThreadが終了したら、requestも正しく処理できない。異常現象としてはrequestが送信できない、エラーも出ない。これもUIThreadがよく使われる原因だ、UIThreadが終了しないから。
解決策の方法がたくさんあるが、原理は一つだ:何とかして、methodを実行するThreadを死なせないように。例えば、flagを立てってwhile loopを掛ける、或はCFRunLoopRun()とCFRunLoopStopを使うと、処理が完成する。
没有评论:
发表评论