我来回答吧。其实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开发的话,那肯定就会快一些的。