Objective C類方法中使用self注意事項

2021-07-01 18:58:43 字數 1316 閱讀 6980

類方法中使用self會是什麼結果,下午在編碼中遇到這個問題:「在類方法中直接使用了self,導致函式沒有被呼叫。」然後,順便研究了一下,在類(或例項)方法中self是如何表現的。

第一、在類方法中使用self作為引數,需要特別注意。

第二、在類(或例項)方法中使用self呼叫方法(如果是錯誤的使用,編譯器會給出編譯錯誤)。

一般來說:當引數指定型別,程式設計師傳入的self也是對應型別。但是,編譯器給出警告。

編譯器提示開發者:把class當做tabbarcontroller使用了

另外一種情況:如果引數是id型別,那麼編譯器不報錯。如下**:

+ (void)gotoinfopage
其中 initwithowner和setdelegatetarget的引數都是id型別,上面的**使用self可以通過編譯,但在request後,requestinfosuccess和requestinfofailure乙個都沒有被執行。在initwithowner函式中列印引數的值如下:

————使用self————

(lldb) po delegate

tabbarcontroller

————使用[tabbarcontroller sharedinstance]————

(lldb) po delegate

很明顯:使用self,實際上是class型別,並不是我們期望的類物件。所以,在requestitem裡面判斷response selector的時候就沒有判斷出來。

1. 例項方法中,self【可以】呼叫例項方法(最常見)

2. 例項方法中,self【不可以】呼叫類方法,此時self不是class。【編譯錯誤】no visible @inte***ce for 'xx' declares the selector 『xx』

3. 類方法中,self【可以】呼叫類方法,此時self是class

4. 類方法中,self【不可以】呼叫例項方法。【編譯錯誤】 no known class method for selector 『***xx』

self跟著函式的本質不同,也會不同。所以,在類方法中使用self,就要特別注意了。

2,類方法裡面的self,是class。類方法不可以使用例項變數,但可以使用self,因為self不是例項變數。此時.self是class

儘管在同乙個類裡面的使用self,但是self卻有著不同的解讀。在類方法裡面的self,可以翻譯成class self;在例項方法裡面的self,應該被翻譯成為object self。在類方法裡面的self和例項方法裡面的self有著本質上的不同,儘管他們的名字都叫self。

Objective C類,物件,方法

objective c採用特定的語法對類和例項應用方法 classorinstance method 左方括號後要緊跟類的名稱或者該類的例項名稱,它後面可以是乙個或多個空格,空格後面是將要執行的方法。最後,使用右方括號和分號來終止。請求乙個實力或類執行某個操作時就是在向它發生一條訊息。import ...

Objective C 的容器類的常用方法

1.陣列 nsarray 2.字典 nsdictionary 3.集合 nsset 以下是它們的一些常用方法 autoreleasepool 快速遍歷 for nsstring name in arr1 4.已知物件,獲取所在位置下標 nslog lu arr1 indexofobject cc a...

Objective C構造方法

構造方法 用來初始化的方法 之前我們建立物件的方式一直是使用 new 但是使用new建立的物件,都是給我們預設做了初始化的。有的時候,我們需要按照我們自己的需求進行初始化,那麼怎麼做呢 首先了解一下,我們使用new建立物件的時候,都做了什麼事情。分配儲存空間 alloc 呼叫類方法alloc來給物件...