1.实例变量存储在结构中
定义一个新类和它的实例变量时,这些实力变量实际存放在一个结构中,这说明了可以如何处理对象,对象实际上是结构,结构中的成员是实例变量。所以继承的实例变量加上你在类中添加变量就构成了一个结构。结构中继承的成员(从根对象中获得)之一是名为isa的保护成员,它确定对象所属的类。因为他是结构的一部分(因此,也是对象的一部分),所以由对象携带。这样,系统运行只需要查看isa成员,就可以确定对象的类(即使将其赋给通用的id对象变量)。
2.对象变量实际上是指针
定义Fraction之类的对象变量时,如:
Fraction *myFraction;
事实上是定义一个名为myFraction的指针变量。使用
myFraction = [Fraction alloc];
来创建Fraction的新实例,是在为Fraction对象的新实例分配内存(即存放结构的空间),然后使用结构指针,并将结构指针存储在其中。
当两个指针都指向存储在内存中的同一个结构,通过其中一个指针来改变结构,同时也将更改另一个指针引用的结构。
3.方法是函数,而消息表达式是函数调用
方法实际上是函数,调用方法时,在调用函数与接受类相关的函数。传递给函数的参数是接受者(self)和方法的参数。所以,无论是函数还是方法,关于传递参数给函数,返回值即静态变量的规则都是一样的。objective c编译器通过类名称和方法名称的组合为每个函数产生一个唯一的名称。
4.id类型是通用指针类型
因为通过指针(就是内存地址)来引用对象,所以可以自由地将它们在id变量之间来回的赋值。因此,返回id类型值的方法只是返回指向内存中某对象的指针。然后可以将该值赋给任何对象变量。因为无论在哪里,对象总是携带它的isa成语,所以,即使将它存储在id类型的通用对象变量中,也总是可以确定他的类。