在繼承中,子類對象如何調用到正確方法的機制
每一個Objective - C對象都有一個隱藏的指針指向類的代碼,當向一個對象發送消息的時候,當前的對象會首先在當前類里去查找相應的方法,如果找到的話,直接執行代碼;若沒有找到,則去父類里找對應的方法,如果找到的話,就會執行。如果找不到繼續按照這樣的原則,沿着繼承鏈向上查找,直到根類NSObject(這個類是Objective - C所有類的根類),如果在這個NSObject類中仍找不到相應的方法,那么程序直接崩潰掉。
在繼承的語法中,子類訪問父類中的實例變量
創建一個新類的時候,其對象首先從自身的超類繼承實例變量(父類一定要設置 設值,取值方法),然后添加自己的實例變量。在這種情況下,每一個子類對象的指針指向對象的最頂端。也就是沿繼承鏈所包含的所有對象的最開始位置,這樣編譯就可以通過地址的偏移來計算所能訪問到所有的超類的實例變量。
重寫的概念
重寫的概念,只存在於繼承語法中。指的是:父類聲明一個方法,但是父類並沒有真正意義的去實現這個方法,而是在子類中真正的實現方法的功能,這種形式就叫做對這個方法的重寫。(重寫方法的目的是為了實現面向對象編程里的多態)。
如何在子類里面,直接調用父類方法或者父類的屬性。
@property 定義的屬性 采用Super關鍵字,需要注意的是,super是一個關鍵字,不是參數,也不是實例變量,他只是編譯器提供的一個功能,當你使用super的時候,編譯器自然知道,你現在的目的只是訪問父類的一些元素。(這里的super與self並不是一個概念:super是一個實實在在存在的一個關鍵字,而self只是一種調用機制,並不是關鍵字)
NSLog調用%@的機制
當使用NSLog格式化參數是%@的時候,實際上失去調用打印對象的description方法,這個方法返回什么值,打印結果就是什么值。(在NSLog這個對象調用時,默認的是打印出我們定義的對象的地址)
