这对我来说还不是很清楚.例:
NSArray*arr = [[NSMutableArray alloc] init];
我的意思是......是的,它有效.但是:为什么我可以告诉编译器"嘿,我的var只是一个NSArray,你只需要保留空间以便它适合那里"然后,实际上,有一个大的,胖的NSMutableArray进入那个有道路的地方更多的方法,更多的实例变量,只需要更多的空间.我的意思是......这怎么可能?
我会理解另一种方式:左侧是大胖子NSMutableArray,右侧是小型NSArray.根据我的理解,超类总是比子类更小,更复杂.子类可能会覆盖一些东西,但它也可能会添加一些东西.对?
想象一下,你买了一个车库,因为你的妻子通过电话告诉你,她买了一些可以开车的东西.然后,它不仅仅是你想象的小型车.她买了一辆大卡车.它不适合那里.
那么我该如何思考这个问题呢?;)
这适用于社区维基,只是因为其他人也感到困惑.
我认为你错误的关键点在于,变量包含对象,编译器会为它们保留空间.
在Objective-C中,就像在Java中一样,变量只包含对象的引用 - 编译器的参与在那里结束.对象本身存在于称为堆的内存区域中,该区域由运行时维护.