読者です 読者をやめる 読者になる 読者になる

AlamofireでGCDはいらなかった

Alamofireのソース読んだら、GCD使わなくていいってことがわかった。

var req = request(.GET, "https://graph.facebook.com/\(uid)/picture?type=large")
req.response { (_, _, image, _) in
    //dispatch_async(dispatch_get_main_queue()) { () in <-いらない
        self.userPhoto.image = UIImage(data: image as NSData)
    //} <-いらない
}

Request#response((, , data, _) -> Void)において、ユーザーが引き渡すクロージャの実行をAlamofireのほうでGCD考えてくれてました。クロージャはメインで実行されるようにお膳立てされてるので、上記の通りスレッド変えない/変わらない。Alamofire-SwiftyJSONでも同じようなお膳立てがなされています。

一方でSocial.FrameworkのSLRequestはこういうことしてくれていないので、コールバックしてくるクロージャは実装者のあずかり知らぬスレッドで動いています。メインスレッドにディスパッチしないとUI操作などできません。Alamofire楽だわ。