objective-c - 为什么oc 的编译速度比java快很多呢
PHP中文网
PHP中文网 2017-04-17 12:57:55
[Java讨论组]

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

PHP中文网
PHP中文网

认证0级讲师

全部回复(5)
PHP中文网

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

大家讲道理

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

PHP中文网

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

PHP中文网

楼主的代码一个是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开发的话,那肯定就会快一些的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号