That's still not totally clear to me. Example:
NSArray *arr = [[NSMutableArray alloc] init];
I mean... yeah, it works. BUT: Why can I tell the compiler "hey, my var is just an NSArray, you just need to reserve space so that this fits in there" and then, in reality, there comes a big, fat NSMutableArray into that place that has way more methods, way more instance variables, and just needs way more space. I mean... how is that possible?
I would understand the other way: Big fat NSMutableArray on left side, and tiny NSArray und the right. For my understanding the superclass is always smaller, less complex then the subclass. The subclass may override some stuff, but it may add some stuff too. Right?
Imagine you buy a garage, because your wife told you on the phone she bought something that can drive. Then, it's not just a small car like you thought. She bought a big truck. And it doesn't fit in there.
So how must I think about this, to get it in my head? ;)
This goes to community wiki, just for the case others are confused too.