沒耐心自己分析源碼的同學,還可以參考Stay錄制的視頻版
Retrofit分析-漂亮的解耦套路(視頻版)
fed9585fb01c944685b113aee6a69b48.jpg
情況是這樣的,昨天手賤翻了下retrofit源碼,其中有個類叫Platform。除了描述它是個動態代理之外,更有趣是它的初始化方式。看圖:
Screen Shot 2016-03-31 at 6.13.47 PM.png
findPlatform() 先找Android,沒Android找Java,連Java都沒有它居然投靠iOS去了。響當當的retrofit居然會是這種人!
慢著。org.robovm.apple.foundation.NSObject。這是什么鬼。這import肯定不對嘛。
Screen Shot 2016-03-31 at 6.12.18 PM.png
那google下吧,robovm.com。媽蛋,還真有這么回事。Robovm可以編譯java代碼并有iOS一整套的轉化代碼來橋接。這樣就能用java開發iOS啦。
類似這樣的橋接生成native代碼的見過不少,相當于一個中間件。lua可以,js可以,flex可以。但我還沒遇過像Robovm這樣直接用java轉iOS的。這太有趣了。
感興趣的可以去瞧瞧github:https://github.com/robovm/robovm
but,僅僅是轉成OC,并不是swift,而且被收購之后也不開源了。價格還不菲。
Screen Shot 2016-03-31 at 6.11.52 PM.png
那么問題來了~為什么retrofit會把這樣一段商業代碼放在開源庫里?難道之前贊助過Robovm?
是不是square的java員工太多啦?你看okhttp,retrofit都是java+android,iOS庫就沒多少。正好用robovm來轉一下?
這都是謎。好了。寶寶不想往下扒了。繼續看源碼去。
?