類方法中使用self會是什麼結果,下午在編碼中遇到這個問題:「在類方法中直接使用了self,導致函式沒有被呼叫。」然後,順便研究了一下,在類(或例項)方法中self是如何表現的。
第一、在類方法中使用self作為引數,需要特別注意。
第二、在類(或例項)方法中使用self呼叫方法(如果是錯誤的使用,編譯器會給出編譯錯誤)。
一般來說:當引數指定型別,程式設計師傳入的self也是對應型別。但是,編譯器給出警告。
編譯器提示開發者:把class當做tabbarcontroller使用了
另外一種情況:如果引數是id型別,那麼編譯器不報錯。如下**:
+ (void)gotoinfopage
其中 initwithowner和setdelegatetarget的引數都是id型別,上面的**使用self可以通過編譯,但在request後,requestinfosuccess和requestinfofailure乙個都沒有被執行。在initwithowner函式中列印引數的值如下:
很明顯:使用self,實際上是class型別,並不是我們期望的類物件。所以,在requestitem裡面判斷response selector的時候就沒有判斷出來。————使用self————
(lldb) po delegate
tabbarcontroller
————使用[tabbarcontroller sharedinstance]————
(lldb) po delegate
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來給物件...