swiftでHTTP通信をした後にUILabelのtextを変更する時に時間がかかる
swiftでHTTP通信をした後にUILabelのtextを変更する時に時間が5秒程かかって、値が入れ替わっています。
どこにそんな時間がかかっているのか、ご教授頂けませんでしょうか。
手順としては
- 新規で作成したSingle View Applicationで、まず storyboard にUILabelだけを配置して、UIViewControllerにoutlet接続しました。
- NSURLSession.sharedSession().dataTaskWithRequest で、サーバーから"message"という文字列だけを返却するjson形式の文字列を取得
- 取得したデータをNSStringに変換
- UILabel.text で、値を設定
- 画面(シミュレーター)に設定した内容が表示されるまでに5〜8秒くらいかかる
の手順になります。
4までの時間は、0.3〜0.8秒くらいで処理が終わってはいるのですが、画面に反映されるのに、なぜこんなに時間がかかっているのかが、わかりません。
何が原因なのかを教えて頂けると助かります。
実機でもシミュレーターでも、動作時間に大差はありませんでした。
宜しくお願い致します。
class ViewController: UIViewController {
var start: NSDate = NSDate()
@IBOutlet weak var lbl: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
println("start=\(start)")
self.lbl.text = "\(start)"
}
override func viewDidAppear(animated: Bool) {
var request = NSMutableURLRequest(URL: NSURL(string: "https://test/my_test/test")!)
request.HTTPMethod = "GET"
var err: NSError?
let task = NSURLSession.sharedSession().dataTaskWithRequest(
request, {
data, response, error in
let r2 = -self.start.timeIntervalSinceNow
println("callback=\(r2)")
self.lbl.text = "callback"
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
let r3 = -self.start.timeIntervalSinceNow
println("encode string=\(r3)")
self.lbl.text = responseString
let r4 = -self.start.timeIntervalSinceNow
println("set string=\(r4)")
})
let r1 = -start.timeIntervalSinceNow
println("before resume=\(r1)")
task.resume()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
実行した時の時間を追記させていただきます。
start=2015-03-12 10:33:30 +0000
before resume=0.0414559841156006
callback=0.253562986850739
encode string=0.253834009170532
set string=0.253944993019104
宜しくお願い致します。