『壹』 ios 類方法和實例方法的區別
類方法: 也被稱為靜態方法,指 static關鍵字修飾的方法。此類方法屬於類本身的方法,不屬於類的某一個實例(對象)。在類方法中不可以直接使用實例變數。其調用方式有三種,可直接調用、類名、方法名、對象名。
實例方法:指的是不用static關鍵字修飾的方法,每個實例對象都有自身的實例方法,互相獨立,不共享。其調用方式只能是對象名,方法名。
何時用靜態方法,何時用類方法?
實例方法: 當你給一個類寫一個方法,如果該方法需要訪問某個實例的成員變數時,那麼方法該被定義為實例方法。 一個類的實例通常有一些成員變數,其中含有該實例的狀態信息。而該方法需要改變這些狀態,那麼該方法需要聲明成實例方法。
類方法(靜態方法):它不需要訪問某個實例的成員變數,不需要改變某個實例的狀態,我們把該方法定義為靜態方法。
類方法和實例方法的誤區:
靜態方法常駐內存,實例方法不是。所以靜態方法效率更高,但占內存。。(錯誤的)
事實上,方法都是一樣,在載入時機和佔用內存上,靜態方法和實例方法是一樣的。在類型第一次被使用時載入,調用的速度基本沒有差別
靜態方法在堆上分配內存,實例方法在棧上(錯誤)
事實上,所有的方法都不可能在堆上或者棧上分配內存,方法作為代碼是被分配到特使的代碼內存區域,這個代碼內存區域是不可寫的。
實例方法需要先創建實例才可以調用,比較麻煩,靜態方法不用,比較簡單。(錯誤)
事實上,如果一個方法不訪問某實例成員變數或者不改變實例狀態,那麼就應該寫成靜態方法。
常用實例和類
第一種方式:聲明實,調用實例方法
當一個類有多個實例,例如學生這個類,實例可以有學生甲乙丙丁。etc 我們就用第一種方式,在多線程的情況下,只要每個線程創建自己的實例,那麼第一種方法通常是線程安全的
第二種:通過靜態的實例去調用實例方法