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楽だわ。