十一:SEL类型

时间:2019-09-22 15:44来源: 操作系统
一、SEL类型基本概念 1、SEL正是对章程的一种包装。包装的SEL类型数据它对应相应的艺术地址,找到方法地址就足以调用方法。 找办法的长河: 先是把test那几个主意名包装成sel类型的

一、SEL类型基本概念

1、SEL正是对章程的一种包装。包装的SEL类型数据它对应相应的艺术地址,找到方法地址就足以调用方法。

找办法的长河:

先是把test那几个主意名包装成sel类型的多寡。

附带依据SEL数据找到相应的章程地址。

最终遵照办法地址调用相应的不二诀要。

注:在那么些操作进度中有缓存,第4回找的时候是三个一个的找,非常耗品质,之后再用到的时候就一向选取。

二、SEL类型的效率

详细见代码:

 1 #import <Foundation/Foundation.h> 2 @interface Person : NSObject 3 - (void)sleep; 4 - (void)eat:(NSString *)food; 5 @end 6 @implementation Person 7 - (void)sleep 8 { 9     NSString *str = NSStringFromSelector;//此处的_cmd相当于@select10     NSLog(@"人喜欢睡觉  %@",str);11 }12 - (void)eat:(NSString *)food13 {14     NSLog(@"人喜欢吃%@",food);15 }16 17 @end18 int main(int argc, const char * argv[]) {19     @autoreleasepool {20         Person *p = [[Person alloc] init];21         //1、将eat方法包装成SEL对象22         SEL sel = @selector;23         //p对象是否实现了eat方法24         BOOL flag = [p respondsToSelector:sel];25         NSLog(@"flag: %d",flag);26         27         28         //2、间接的调用eat和eat:方法,最多可以传两个参数!29         [p performSelector:@selector];30         [p performSelector:@selector withObject:@"麻辣烫"];31         //上面的方法都可以先创建SEL sel1 = @selector;但是代入之后会警告PerformSelector may cause a leak because its selector is unknown! 去除警告的方法详见http://www.tuicool.com/articles/iu6zuu32         33         //3、如只知道字符串是Person方法时34         NSString *name = @"sleep";35         [p performSelector:NSSelectorFromString];36         37     }38     return 0;39 }

打字与印刷的结果:

2016-04-29 10:19:31.389 SEL[10053:1696298] flag: 12016-04-29 10:19:31.392 SEL[10053:1696298] 人喜欢睡觉  sleep2016-04-29 10:19:31.392 SEL[10053:1696298] 人喜欢吃麻辣烫2016-04-29 10:19:31.392 SEL[10053:1696298] 人喜欢睡觉  sleepProgram ended with exit code: 0

编辑: 操作系统 本文来源:十一:SEL类型

关键词:

  • 上一篇:没有了
  • 下一篇:没有了