自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iOS開發(fā) 關于SEL的簡單總結(jié)

移動開發(fā) iOS
SEL就是對方法的一種包裝。包裝的SEL類型數(shù)據(jù)它對應相應的方法地址,找到方法地址就可以調(diào)用方法。在內(nèi)存中每個類的方法都存儲在類對象中,每個方法都有一個與之對應的SEL類型的數(shù)據(jù),根據(jù)一個SEL數(shù)據(jù)就可以找到對應的方法地址,進而調(diào)用方法。

[[109777]]

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

SEL就是對方法的一種包裝。包裝的SEL類型數(shù)據(jù)它對應相應的方法地址,找到方法地址就可以調(diào)用方法

1.方法的存儲位置

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

2.SEL對象的創(chuàng)建

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

3.SEL對象的其他用法

  1. // 將SEL對象轉(zhuǎn)換為NSString對象   
  2. NSString *str = NSStringFromSelector(@selector(test)); 
  3.  
  4.  Person *p = [Person new]; 
  5.  
  6. // 調(diào)用對象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(@"無參數(shù)的對象方法"); 
  21.  
  22. - (void)test2:(NSString *)str 
  23.     NSLog(@"帶有參數(shù)的方法%@",str); 
  24. @end 
  25.  
  26. /******************************* main.m文件 **********************************/ 
  27.  
  28. #import "Person.h" 
  29. #import <Foundation/Foundation.h> 
  30.  
  31. /* 
  32.  調(diào)用方法有兩種方式: 
  33.  1.直接通過方法名來調(diào)用 
  34.  2.間接的通過SEL數(shù)據(jù)來調(diào)用 
  35.  */ 
  36.  
  37. int main(int argc, const char * argv[]) 
  38.     Person *person = [[Person alloc] init]; 
  39.      
  40.     // 1.執(zhí)行這行代碼的時候會把test2包裝成SEL類型的數(shù)據(jù) 
  41.     // 2.然后根據(jù)SEL數(shù)據(jù)找到對應的方法地址(比較耗性能但系統(tǒng)會有緩存) 
  42.     // 3.在根據(jù)方法地址調(diào)用對應的方法 
  43.      
  44.     [person test1]; 
  45.      
  46.     // 將方法直接包裝成SEL數(shù)據(jù)類型來調(diào)用 withObject:傳入的參數(shù) 
  47.     [person performSelector:@selector(test1)]; 
  48.     [person performSelector:@selector(test2:) withObject:@"傳入?yún)?shù)"]; 
  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開發(fā)移動應用移動開發(fā)

2013-09-12 15:37:09

iOS開發(fā)流程

2011-08-31 10:26:38

MTK驅(qū)動開發(fā)

2017-04-12 10:04:18

Scrum實踐終結(jié)

2017-08-24 14:11:20

iOSSocial FramOpenShare

2011-09-02 19:12:59

IOS應用Sqlite數(shù)據(jù)庫

2017-09-06 12:42:45

AndroidGradle開發(fā)技巧

2013-01-06 09:52:43

SQLite

2013-04-09 16:04:06

iOS開發(fā)SQLite知識總結(jié)

2011-08-05 10:13:45

iPhone開發(fā)工具 Cocoa Xcode

2013-04-01 17:05:28

2017-01-19 21:45:27

iOS開發(fā)者賬號

2017-11-06 16:00:05

iOS安卓發(fā)送原圖

2010-08-05 13:58:33

NFS故障

2011-08-18 11:19:13

IOS開發(fā)Core Plot S

2018-07-12 11:44:38

數(shù)據(jù)庫MySQL變量分類

2013-07-25 14:12:53

iOS開發(fā)學習UITableView

2017-04-26 15:30:31

PHP錯誤機制
點贊
收藏

51CTO技術棧公眾號