1.》两指针所在的类:isa指针 和 SEL指针 是属于NSObject基类。 》类的本质:即是一个结构体。
2.当创建一个类后: 》创建对象:类 * p = [类 new] ; 》在创建一个对象之前,在堆内存中就先存在了一个该类的类类型对象,其中有一个SEL指针就是指向在代码区内该类的第一个方法。 》定义一个对对象之后,在堆内存中创建了一个该类的对象,该对象包含了一个isa指针的成员变量(第一个属性),isa指针则指向在堆里面存在的类类型对象, 在栈内存里创建了一个该类的指针p,p指针指向的是isa地址。
3.当执行[p 方法] 时: 》当p调用该类的一个方法时,首先通过p找到isa指针,再通过isa指针找到类类型对象,当在堆内存中找到类类型对象后,首次调用该类的方法时,用while(SEL == 方法地址) 找到该方法,这样就完成了一次方法的调用。当下一次该对象调用同一个方法时,直接在缓存中找到。
|