iOS-面試官如果問你performSelector用過沒?
- 面試官如果這樣問你,其實想問你有關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
方法面前,沒有私有方法
相關文章
- 面試官問:Mybatis中的TypeHandler你用過嗎?面試MyBatis
- 面試官:如果讓你寫個分散式配置中心,就問你慌不慌面試分散式
- 如果面試官問你 JVM,額外回答逃逸分析技術會讓你加分!面試JVM
- 面試官問,你使用過命令模式嗎?我笑了!面試模式
- 面試官: 你平時用過讀寫鎖嗎?面試
- 面試時,你會問面試官哪些問題?面試
- 沒用過微服務?別慌,丐版架構圖,讓你輕鬆拿捏面試官微服務架構面試
- 面試官隨便問幾個問題就知道你究竟做沒做過微信支付寶支付面試
- 面試官:說一說CyclicBarrier的妙用!我:這個沒用過面試
- 面試官: 你瞭解過Babel嗎?寫過Babel外掛嗎? 答: 沒有。卒面試Babel
- 面試官:你用過哪些JDK自帶的命令列工具面試JDK命令列
- 面試官:你分析過mybatis工作原理嗎?面試MyBatis
- 如果我是Android面試官二Android面試
- 如果我是Android面試官一Android面試
- 如果我是推薦演算法面試官,我會問哪些問題?演算法面試
- 面試官問:如果讓你寫一個配置中心,說說你的設計思路? 不要慌,看這個!面試
- 面試官:註解五問你怕了嗎?面試
- 如何面試你的面試官面試
- 面試官,你再問我 Bit Operation 試試?面試
- 面試官問:你瞭解HTTP2.0嗎?面試HTTP
- 看完這篇 HashSet,跟面試官扯皮沒問題了面試
- 面試官:你分析過SpringMVC的原始碼嗎?面試SpringMVC原始碼
- 詢問面試官的面試問題面試
- 看完這篇HTTP,跟面試官扯皮就沒問題了HTTP面試
- 面試官:十問泛型,你能扛住嗎?面試泛型
- 面試官問你陣列和ArrayList怎麼答?面試陣列
- 面試官:你還有什麼想問我的?面試
- 如果你的網站沒有JavaScript網站JavaScript
- 面試官問:什麼是布隆過濾器?面試過濾器
- 面試官桀桀一笑:你沒做過大檔案上傳功能?那你回去等通知吧!面試
- 阿里面試官用HashMap把我問倒了阿里面試HashMap
- 假如面試官問你Babel的原理該怎麼回答面試Babel
- 面試官問到TCP/IP怎麼回答才過關面試TCP
- 面試官: 說一下你做過哪些效能優化?面試優化
- 當面試官說 “你還有什麼問題想問的”,你該如何回答?面試
- 當面試官說 “你還有什麼問題想問的” ,你該如何回答?面試
- 當面試官說“你還有什麼問題想問的”,你該如何回答?面試
- 面試官:你使用webpack時手寫過loader,分離過模組嗎?面試Web