關於Objective C方法簽名規則的說明

2021-10-08 16:54:08 字數 763 閱讀 3815

引入#import

selsel =@selector(methodsignature:);

method signm = class_getclassmethod([uiview class], sel);

constchar* s = method_gettypeencoding(signm);

nslog(@"%s",s);

oc 方法簽名規則:(v|@)a@0:8(@ | ^v | @? | ^i)b(@ | ^v | @? | ^i)c以此類推

其中v標識void  @標識基本型別和物件型別

@0:8 是固定部分,將左右分開,左邊是返回型別簽名(@0為返回的標誌)  右邊是引數型別簽名(:8為sel方法的標誌)

^為指標型別,例如^v為void指標型別  ^i為int指標型別

@?是閉包型別

關於a,b,c的說明,a為返回值 b為引數1,c為引數2 以此類推n個引數,a的數值為8+1*8,b為8+2*8

後面以此類推為8+n*8   。最後a的值為8+(n + 1) * 8

舉例  v40@0:8@?16^v24@32  此簽名為返回值為空,引數一為閉包 引數二為void指標型別 引數三為基本型別或物件型別

詳細引數型別如下:

// 型別編碼列舉

enum _nsobjcvaluetype

Objective C,關於動態引數方法

ios開發中有時需要給方法傳入不定個數的引數,即動態引數繫結,編寫動態引數方法之前,有幾個c語言函式需要了解一下 va list 宣告乙個指向動態引數列表的指標 va start param,test 獲得引數位址,即讓 param 指向test va arg param,id 指向動態引數列表的下...

Objective C構造方法

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

Objective c 方法的呼叫

在書寫了類的宣告和實現後,應用程式如何去呼叫它呢?在objective c中,呼叫方法的簡單格式如下 1 例項 方法 如 person setage 32 其中 person是person類的例項。或者是 2 類名 方法名 如 nsstring str nsdate date 這是直接呼叫類nsda...