OC-选择器

选择器是发送消息的机制,通过 @selector(方法名)或者 创建SEL 类型的变量来调用执行方法。

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #78492a}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3d1d81}span.s1 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s4 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s5 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s6 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s7 {font-variant-ligatures: no-common-ligatures; color: #008400}span.s8 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #008400}span.s9 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s10 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s11 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s12 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s13 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s14 {font-variant-ligatures: no-common-ligatures; color: #31595d}

//通过方法名创建选择器
        SEL sel=@selector(dogEat);
        
        Dog *xiaobai = [[Dog alloc]init];
        
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"  //告诉编译器不会造成内存泄漏
        if ([xiaobai respondsToSelector:sel]){ //判断对象所属类是否实现了selector中的方法
            NSLog(@"方法1");
        [xiaobai performSelector:sel]; //通过performSelector关键字,执行了选择器中的方法。
        }
    
        
        
//用方法名对的字符串对象生成选择器
        SEL sel2=NSSelectorFromString(@"dogBark:");
        
         if ([xiaobai respondsToSelector:sel2]){
             NSLog(@"方法2");
             [xiaobai performSelector:sel2 withObject:[NSNumber numberWithInt:5]];
        }

//用方法名的c语言字符串生成选择器
        SEL sel3 = sel_getUid("dogBark:");
        if ([xiaobai respondsToSelector:sel3]) {
            NSLog(@"方法3");
            [xiaobai dogBark:[NSNumber numberWithInt:4]];
        }
        
//获取选择器中的方法名
        NSLog(@"name = %@", NSStringFromSelector(sel)); //方法名字符串对象
        NSLog(@"name = %s", sel_getName(sel2));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 2,041评论 0 9
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 2,328评论 0 7
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,885评论 33 466
  • 继上Runtime梳理(四) 通过前面的学习,我们了解到Objective-C的动态特性:Objective-C不...
    小名一峰阅读 846评论 0 3
  • 现象 今日,数据库服务器连接数出现突然激增?导致有些应用拿不到数据库链接,数据库各种DML和DDL大面积超时,而各...
    想太多的猫阅读 1,808评论 0 0

友情链接更多精彩内容