成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS開發 關于SEL的簡單總結

移動開發 iOS
SEL就是對方法的一種包裝。包裝的SEL類型數據它對應相應的方法地址,找到方法地址就可以調用方法。在內存中每個類的方法都存儲在類對象中,每個方法都有一個與之對應的SEL類型的數據,根據一個SEL數據就可以找到對應的方法地址,進而調用方法。

[[109777]]

  1. @interface Person : NSObject 
  2.  
  3. + (void)test1; 
  4. - (void)test2; 
  5. @end 
  6.  
  7.     // 根據.h文件中定義的Person類和方法 執行完這行代碼 在內存中如下 
  8.     Person *person = [[Person alloc] init]; 

SEL就是對方法的一種包裝。包裝的SEL類型數據它對應相應的方法地址,找到方法地址就可以調用方法

1.方法的存儲位置

  • 在內存中每個類的方法都存儲在類對象中
  • 每個方法都有一個與之對應的SEL類型的數據
  • 根據一個SEL數據就可以找到對應的方法地址,進而調用方法
  • SEL類型的定義:  typedef struct objc_selector *SEL

2.SEL對象的創建

  1. SEL s1 = @selector(test1);   // 將test1方法包裝成SEL對象  
  2. SEL s2 = NSSelectorFromString(@"test1");   // 將一個字符串方法轉換成為SEL對象 

3.SEL對象的其他用法

  1. // 將SEL對象轉換為NSString對象   
  2. NSString *str = NSStringFromSelector(@selector(test)); 
  3.  
  4.  Person *p = [Person new]; 
  5.  
  6. // 調用對象p的test方法 
  7. [p performSelector:@selector(test)];
  1. /******************************* Person.h文件 **********************************/ 
  2.  
  3. #import <Foundation/Foundation.h> 
  4.  
  5. @interface Person : NSObject 
  6.  
  7. - (void)test1; 
  8.  
  9. - (void)test2:(NSString *)str; 
  10.  
  11. @end 
  12.  
  13. /******************************* Person.m文件 **********************************/ 
  14.  
  15. #import "Person.h" 
  16.  
  17. @implementation Person 
  18.  
  19. - (void)test1 
  20.     NSLog(@"無參數的對象方法"); 
  21.  
  22. - (void)test2:(NSString *)str 
  23.     NSLog(@"帶有參數的方法%@",str); 
  24. @end 
  25.  
  26. /******************************* main.m文件 **********************************/ 
  27.  
  28. #import "Person.h" 
  29. #import <Foundation/Foundation.h> 
  30.  
  31. /* 
  32.  調用方法有兩種方式: 
  33.  1.直接通過方法名來調用 
  34.  2.間接的通過SEL數據來調用 
  35.  */ 
  36.  
  37. int main(int argc, const char * argv[]) 
  38.     Person *person = [[Person alloc] init]; 
  39.      
  40.     // 1.執行這行代碼的時候會把test2包裝成SEL類型的數據 
  41.     // 2.然后根據SEL數據找到對應的方法地址(比較耗性能但系統會有緩存) 
  42.     // 3.在根據方法地址調用對應的方法 
  43.      
  44.     [person test1]; 
  45.      
  46.     // 將方法直接包裝成SEL數據類型來調用 withObject:傳入的參數 
  47.     [person performSelector:@selector(test1)]; 
  48.     [person performSelector:@selector(test2:) withObject:@"傳入參數"]; 
  49.      
  50.     return 0; 

 

責任編輯:閆佳明 來源: cnblogs
相關推薦

2014-06-10 13:44:58

iOSUIImage知識點

2011-05-11 10:02:37

iOS

2013-06-03 16:27:49

iOS開發移動應用移動開發

2013-09-12 15:37:09

iOS開發流程

2011-08-31 10:26:38

MTK驅動開發

2017-04-12 10:04:18

Scrum實踐終結

2017-08-24 14:11:20

iOSSocial FramOpenShare

2011-09-02 19:12:59

IOS應用Sqlite數據庫

2017-09-06 12:42:45

AndroidGradle開發技巧

2013-01-06 09:52:43

SQLite

2013-04-09 16:04:06

iOS開發SQLite知識總結

2011-08-05 10:13:45

iPhone開發工具 Cocoa Xcode

2013-04-01 17:05:28

2017-01-19 21:45:27

iOS開發者賬號

2017-11-06 16:00:05

iOS安卓發送原圖

2010-08-05 13:58:33

NFS故障

2011-08-18 11:19:13

IOS開發Core Plot S

2018-07-12 11:44:38

數據庫MySQL變量分類

2015-09-09 10:20:00

php緩存技術

2017-04-26 15:30:31

PHP錯誤機制
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精彩免费视频 | 视频一区二区三区四区五区 | а天堂中文最新一区二区三区 | www.久久久久久久久久久 | 精品国产一区二区三区久久久蜜月 | 中文字幕一区在线 | 久久久久成人精品 | 成人av观看 | 亚洲视频www| 精品亚洲一区二区三区四区五区 | 精品久久久久久久久久久下田 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 国产精品jizz在线观看老狼 | 国产日韩欧美电影 | 婷婷综合网 | 国产视频精品视频 | 男女免费观看在线爽爽爽视频 | 成人在线视频免费播放 | 久久精品亚洲一区 | 亚洲精品一| 五月婷婷 六月丁香 | 99re视频在线观看 | 久久中文免费视频 | 在线午夜 | 黄色片在线观看网址 | 国产日韩视频在线 | 人人鲁人人莫人人爱精品 | 操皮视频 | 色婷婷在线视频 | 亚洲成人国产 | av片毛片| 视频一区在线观看 | 免费av直接看 | 成人精品国产一区二区4080 | 激情国产视频 | 精品成人av | 日日摸夜夜添夜夜添精品视频 | 天天综合网91 | 国产精品久久久久久婷婷天堂 | 婷婷丁香在线视频 | 欧美成人一区二免费视频软件 |