OC語言description方法和sel緩存
1、description方法性能
Description方法包括類方法和對象方法。(NSObject類所包含)對象
(一)基本知識blog
-description(對象方法)ip
使用NSLog和@%輸出某個對象時,會調用對象的description方法,並拿到返回值進行輸出。內存
+description(類方法)字符串
使用NSLog和@%輸出某個對象時,會調用類對象的description方法,並拿到返回值進行輸出,把整個對象一次性打印出來,打印對象使用%@。cmd
使用@%打印對象如(「@%」,P)默認打印輸出爲<類名:內存地址>,雖然字符串也是對象,但字符串在使用@%打印時狀況特殊。it
那麼應該怎麼實現打印對象的全部屬性呢?在類的實現中重寫description方法。io
(二)實現打印對象的全部屬性
(三)區別
+description方法決定了類對象的輸出結果,即類自己
-description方法決定了實例對象的輸出結果,即Person建立的對象。
(四)打印相關補充
2、SEL
SEL:全稱Selector 表示方法的存儲位置。
方法在內存中是怎麼存儲的?
Person *p=[[Person alloc] init];
[p test];
尋找方法的過程:
(1)首先把test這個方法名包裝成sel類型的數據;
(2)根據SEL數據找到對應的方法地址;
(3)根據方法地址調用相應的方法。
(4)注意:在這個操做過程當中有緩存,第一次找的時候是一個一個的找,很是耗性能,以後再用到的時候就直接使用。
關於_cmd:每一個方法的內部都有一個-cmd,表明着當前方法。
注意:SEL實際上是對方法的一種包裝,將方法包裝成一個SEL類型的數據,去尋找對應的方法地址,找到方法地址後就能夠調用方法。這些都是運行時特性,發消息就是發送SEL,而後根據SEL找到地址,調用方法。