首页 > 为什么oc 的编译速度比java快很多呢

为什么oc 的编译速度比java快很多呢

Xcode一下子就编译好了,java编译一个项目要好久


因为 oc 是用了 llvm 和 gcc 还有一系列工具链
Java 要解决各种依赖包,资源管理,id连接,进行dex转换
-----佚名


楼主的代码一个是oc,一个是java,如果比较速度的话,也得在相同条件下比较啊。难道是的代码行数相同,代码的逻辑相同,文件个数相同?要说编译相同语言,还可以做下比较。


我来回答吧。其实oc的第一次编译也不是很快,,只是如果第一次编译之后,以后迭代开发,改几个文件的话,那么再次编译很快。。。
为什么呢?原因是:oc是消息型语言,也就是如果你写
@interface A {
int _a;
int _b
}
@end
那么java是把 里面的_a当成一个偏移量,编译后就写死了。。比如 _a可能是+4,_b可能是+8 按照顺序。
然后访问_b 就是 自己的指针 _b = *(self + 8);这种指针偏移量替换的形式。
那么如果修改了,比如在_a, _b 之间插入,int _c 这样,
@interface A {
int _a;
int _c;
int _b
}
@end
那么,原来_b的位置就被占用了,所以,原来编译好的(self + 8);指向了_c, 所以无奈,原来编译好的东西只能重新编译,可能有3个文件用到了A,那么,它们也只能重新编译,这很快就会蔓延开来,所以只能整个工程都重新编译耗时。。
但是,oc比较伶俐。。它的偏移量是运行期间动态查找的,所以,就是改了,运行期间也能动态的找到。不用重新编译太多东西,编译的只是修改的一部分,不会蔓延开来。。。所以迭代开发时,会感觉oc很快。。。
还有电脑的原因。。如果你用Mac air开发的话,那肯定就会快一些的。


我可不这么认为 如果你用eclipse的话基本上改一个java自动就编译成class了 jar就是一个打包过程能慢到好久么


要看你怎么编译了,现代的Xcode中的LLVM是针对OC优化,以前用的是GCC也没觉得有多少快~
java的就太多了,各种编译器也不知道你用的是哪一个~

【热门文章】
【热门文章】