小心易碎:编译器使用”基地址加偏移”机制实现奇妙的功能.给定的对象基地址,是指第一个实例变量的首个字节在内存中的位置.通过在该地址加上偏移 地址,编译器就可以查找其他实例变量的位置.如:如果圆角矩形对象的基地址是0×1000,则isa实例变量的地址是0×1000+0,即位于 0×1000位置,isa的值占4个字节,因此,下一个实例变量fillColor的起始地址位于4个偏移地址之后,即位于0×1000+4位置,或写作 0×1004,,每个实例变量与对象的基地址都有一个偏移位置.如果访问方法中的fillColor实例变量,编译器生成代码并得到存储self的位置 值,然后加上偏移值(在本例中为4),得到指向存储变量值的位置.随着时间的推移,这也回产生一些问题,现在,在编译器生成的程序中,这些偏移位置是通过 硬编码实现的.尽管苹果公司的工程师希望向NSObject中添加其他的实例变量,但他们无法做到,因为这样做会改变所有实例变量的偏移位置.这被称为脆 弱的基类问题(fragile base class problem).通过在Leopard中引入新的64位Objective-C运行(它使用间接寻址方式确定变量的位置),苹果公司解决了这个问题.