美文网首页ios基础知识iOS 开发 runtime
iOS-面试官如果问你performSelector用过没?

iOS-面试官如果问你performSelector用过没?

作者: 船长_ | 来源:发表于2016-05-10 22:57 被阅读1555次
  • 面试官如果这样问你,其实想问你有关runtime一些基础知识
  • Objective-C中调用函数的方法是“消息传递”,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候传递人和消息
  • Cocoa提供NSClassFromString和NSSelectorFromString,利用OC动态特性是通过String来生成Classes和Selectors
  • NSSelectorFromString动态加载实例方法

主要学习一下NSSelectorFromString

示例1

通过传一个字符串参数,生成一个方法,并返回一个数组

tmpArray1 = [self getArrayWithType:@"SarlaryRange"];
tmpArray2 = [self getArrayWithType:@"WorkAge"];

- (NSMutableArray *)getArrayWithType:(NSString *)type {
    NSString *action = [NSString stringWithFormat:@"update%@Action", type];
    NSArray *tmpArray = [[NSArray alloc] init];
    SEL sel = NSSelectorFromString(action);
    if ([self respondsToSelector:sel]) {
        tmpArray = [self performSelector:sel];
    }
    return array;
}

- (NSArray *)updateSarlaryRangeAction {
    NSArray *array = @[@"不限",@"3k~5K",@"5k~10k",@"10k~20k",@"20k~30k"];
    return array;
}
- (NSArray *)updateWorkAgeAction {
    NSArray *array = @[ @"不限", @"1年以下", @"1~3年", @"3~5年", @"5~10年" ];
    return array;
}

示例2

应用需求:遍历数组,让数组中每个对象执行对应的方法
1.普通写法

    for (id data in object) { 
        if ([[data type] isEqualToString:@"String"]) {
            [self parseString:[data value]]; 
        } else if ([[data type] isEqualToString:@"Number"]) {
            [self parseNumber:[data value]];
        } else if ([[data type] isEqualToString:@"Array"]) {
            [self parseArray:[data value]];
        }
    }

2.利用NSSelectorFromString生成方法名,利用performSelector执行方法

- (void)parseObjectDynamic:(id)object {
    for (id data in object) {
        [self performSelector:NSSelectorFromString([NSString stringWithFormat:@"parse%@:", [data type]]) withObject:[data value]];
    }
}
- (void)parseString:(NSString *)aString {}
- (void)parseNumber:(NSString *)aNumber {}
- (void)parseArray:(NSString *)aArray {}

示例3

带有两个参数的写法

 // 有参数
SEL sel = NSSelectorFromString(@"test::");
if([self respondsToSelector:sel]){
    // withObject:参数;
    [self performSelector:sel withObject: @"test1" withObject: @"test2" ];
    }
}
- (void)test:(NSString *)str1 :(NSString *)str2{
    NSLog(@"%@--%@",str1,str2);
}

performSelector方法面前,没有私有方法

相关文章

  • iOS-面试官如果问你performSelector用过没?

    面试官如果这样问你,其实想问你有关runtime一些基础知识 Objective-C中调用函数的方法是“消息传递”...

  • iOS-取消延迟执行的方法cancelPreviousPerfo

    前面写过一篇文章iOS-利用performSelector调用方法iOS-利用performSelector调用方...

  • objc runtime (三)动态添加方法

    - (id)performSelector:方法 大家一定都用过- (id)performSelector:这个方...

  • 面试回顾:京东实习一面

    面试流程: 自我介绍+项目介绍(如果没有或者不太相关,面试官就跳过)+你熟悉什么面试官就重点问你什么+你向面试官提...

  • 如何回答面试官,你的缺点是什么?

    当面试官问你的缺点是什么的时候,应该如何回答呢? 当面试官微笑着问你,可以谈谈自己的缺点吗?如果应聘者低头莞尔一笑...

  • 还记得前两年出去面试的时候,面试官总是会问你使用过哪些锁?哪些场景下使用哪些锁等等问题? 首先Java中最经常使用...

  • 惊!史上最全的select加锁分析(Mysql)

    引言 大家在面试中有没遇到面试官问你下面六句Sql的区别呢 如果你能清楚的说出,这六句sql在不同的事务隔离级别下...

  • Mysql的select加锁分析

    引言 大家在面试中有没遇到面试官问你下面六句Sql的区别呢 如果你能清楚的说出,这六句sql在不同的事务隔离级别下...

  • Java基础--容器类

    面试官:Java的容器类你有什么了解吗?-:额,没有用过....面试官:你肯定用过,但你没有注意过....-:应该...

  • 是时候该盘点下你的能力了~

    当面试官问你,你有哪些能力?你回答:认真,有责任感,有耐心... 如果面试官看过《你的降落伞是什么颜色》,他就会知...

网友评论

  • 1cdb19c230be:你好 用runtime 写 下面还是要写具体方法是吗

本文标题:iOS-面试官如果问你performSelector用过没?

本文链接:https://www.haomeiwen.com/subject/hlbyrttx.html