没耐心自己分析源码的同学,还可以参考Stay录制的视频版
Retrofit分析-漂亮的解耦套路(视频版)
情况是这样的,昨天手贱翻了下retrofit源码,其中有个类叫Platform。除了描述它是个动态代理之外,更有趣是它的初始化方式。看图:
findPlatform() 先找Android,没Android找Java,连Java都没有它居然投靠iOS去了。响当当的retrofit居然会是这种人!
慢着。org.robovm.apple.foundation.NSObject。这是什么鬼。这import肯定不对嘛。
那google下吧,robovm.com。妈蛋,还真有这么回事。Robovm可以编译java代码并有iOS一整套的转化代码来桥接。这样就能用java开发iOS啦。
类似这样的桥接生成native代码的见过不少,相当于一个中间件。lua可以,js可以,flex可以。但我还没遇过像Robovm这样直接用java转iOS的。这太有趣了。
感兴趣的可以去瞧瞧github:https://github.com/robovm/robovm
but,仅仅是转成OC,并不是swift,而且被收购之后也不开源了。价格还不菲。
那么问题来了~为什么retrofit会把这样一段商业代码放在开源库里?难道之前赞助过Robovm?
是不是square的java员工太多啦?你看okhttp,retrofit都是java+android,iOS库就没多少。正好用robovm来转一下?
这都是谜。好了。宝宝不想往下扒了。继续看源码去。