OC基礎 SEL解析14

2021-08-02 23:45:28 字數 2143 閱讀 1253

sel全稱叫做

selector

選擇器.

sel是1

個資料型別

. 所以要在記憶體中申請空間儲存資料.

sel其實是1個類

. sel

物件是用來儲存

1個方法的.

類是以class

物件的形式儲存在**段之中.

類名:儲存的這個類的類名

. nsstring

還要將方法儲存在類物件之中

.如何將方法儲存在類物件之中.

1).

先建立1

個sel物件.

2).

將方法的資訊儲存在這個

sel物件之中.

3).

再將這個

sel物件作為類物件的屬性.

1).

因為sel是1

個typedef

型別的在自定義的時候已經加*了

. 所以我們在宣告

sel指標的時候

不需要加*

2).

取到儲存方法的

sel物件,

sels1 =

@selector

(方法名);

[stu1 sayhi];

內部的原理:

1).

先拿到儲存

sayhi

方法的sel

物件,也就是拿到儲存

sayhi

方法的sel

資料.

sel訊息.

2).

將這個sel

訊息傳送給

stu1物件.

3).

這個時候

,stu1

物件接收到這個

sel訊息以後

就知道要呼叫方法

4).

根據物件的

isa指標找到儲存類的類物件.

5).

找到這個類物件以後

在這個類物件中去搜尋是否有和傳入的

sel資料相匹配的.

如果有就執行

如果沒有再找父類

直到nsobject oc

最重要的

1個機制

:訊息機制.

呼叫方法的本質其實就是為物件傳送

sel訊息.

[stu1 sayhi];

為stu1

物件傳送1條

sayhi訊息.

1).方法是以

sel物件的形式儲存起來.

2).如何拿到儲存方法的

sel物件.

1).

先得到方法的

sel資料.

2).

將這個sel

訊息傳送給

p1物件.

呼叫物件的方法

將sel

資料傳送給物件.

- (id

)performselector:(

sel)aselector;

student *stu1 = [student

new];

sels1 =

@selector

(sayhi);

[stu1 performselector:s1];

與[p1 sayhi]

效果是完全一樣的.

3). 呼叫1

個物件的方法有兩種.

1). [

物件名方法名];

2).

手動的為物件傳送

sel訊息.

1).

如果方法有引數

那麼方法名是帶了冒號的.

2).

如果方法有引數

,如何傳遞引數.

那麼就呼叫另外

1個方法.

- (id

)performselector:(

sel)aselector withobject:(

id)object;

- (id)performselector:(

sel)aselector withobject:(

id)object1 withobject:(

id)object2;

3).

如果有多個引數

把引數封裝到物件裡

OC特有語法 SEL

sel就是對方法的一種包裝。包裝的sel型別資料它對應相應的方法位址,找到方法位址就可以呼叫方法。在記憶體中每個類的方法都儲存在類物件中,每個方法都有乙個與之對應的sel型別的資料,根據乙個sel資料就可以找到對應的方法位址,進而呼叫方法。inte ce person nsobject void t...

OC中description方法和sel

補充兩個知識點 一 description方法 description方法包括類方法和物件方法。nsobject 類所包含 一 基本知識 description 物件方法 使用nslog和 輸出某個物件時,會呼叫物件的 description 方法,並拿到返回值進行輸出。description 類方...

OC基礎 XML的解析方式

dom 建立xml解析器 nsxmlparser parser nsxmlparser alloc initwithdata data 設定 parser.delegate self 開始解析xml parse方法是阻塞式的 parser parse 解析到某個元素的結尾 比如解析 void par...