IOS SEL的理解與使用

2021-09-23 21:00:20 字數 3336 閱讀 2327

有很多人,認為block的推廣可取代**設計模式,其實block並不能取代**,**的模式可以讓**邏輯性更強,更整潔,也會有更高的可讀性和可擴充套件性。相比之下,我覺得block更多的是取代了選擇器@selector。

@selector是什麼?我們要首先明白sel,sel並不是一種物件型別,我們通過xcode的字型顏色就可以判斷出來,它是乙個關鍵字,就像int,long一樣,它宣告了一種型別:類方法指標。其實就可以理解為乙個函式指標。比如,我們生命乙個叫mylog的函式指標: ?

12

3

4

5

6

7

#import "viewcontroller.h"

@inte***ce viewcontroller ()

@end

宣告出了這個指標,我們該如何給它傳遞這個函式呢?有兩種方式:

1、在編譯時,使用@selector來取得函式

現在,我們應該明白@selector是什麼了,它是乙個編譯標示,我們通過它來取到相應函式。 ?

12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

@inte***ce viewcontroller ()

@end

@implementation viewcontroller

- (void)viewdidload

-(void)mylogl

2、在執行時,通過nsselectorfromstring方法來取到相應函式:?

12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#import "viewcontroller.h"

@inte***ce viewcontroller ()

@end

@implementation viewcontroller

- (void)viewdidload

-(void)mylogn

這兩種方式的差別在於,編譯時的方法如果沒有找到相應函式,xcode會報錯,而執行時的方法不會。

至於sel的應用,我相信最廣泛的便是target——action設計模式了。我們來簡單模擬一下系統button的工作原理:

我們先建立乙個繼承於uibutton的類:

.**件: ?

12

3

4

5

#import

@inte***ce mybutton : uibutton

-(void)addmytarget:(id)target action:(sel)action;

@end

.m檔案 ?

12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#import "mybutton.h"

@implementation mybutton

-(void)addmytarget:(id)target action:(sel)action

-(void)touchesbegan:(nsset *)touches withevent:(uievent *)event

@end

在外部:?

12

3

4

5

6

7

8

9

10

11

- (void)viewdidload

-(void)click

當然,如果要呼叫引數,系統提供的預設引數不超過兩個,如果引數很多,一種是我們可以通過字典傳參,另一種方法比較複雜,在這裡先不討論。

iOS SEL的簡單總結

複製 inte ce person nsobject void test1 void test2 end 根據.h檔案中定義的person類和方法 執行完這行 在記憶體中如下 person person person alloc init 複製 sel就是對方法的一種包裝。包裝的sel型別資料它對應...

iOS SEL的用法和講解

1 什麼是sel 可理解成 selector 方法選擇器。於是乎就可說成是c中的指標函式。而在oc裡不能用指標函式,所有就只能搞乙個 selector這來取了。他的結果是sel型別,用assgin修飾。去取方法的編號 函式位址 2 使用 2.1 示例 selview.h sel實現 import i...

v model的理解與使用

步驟 1 了解v model的本質 2 了解v model的使用方法 如下 本質上是,其中 input是對輸入事件的乙個監聽 value test 是將監聽事件中的資料放入到input,並且,v model不僅可以給input賦值還可以獲取input中的資料,而且資料的獲取是實時的,因為語法糖中是用...