SEL 类型
1.SEL類型的第一個作用, 配合對象/類來檢查對象/類中有沒有實現某一個方法
SEL sel = @selector(setAge:);Person *p = [Person new];// 判斷p對象中有沒有實現-號開頭的setAge:方法// 如果P對象實現了setAge:方法那么就會返回YES// 如果P對象沒有實現setAge:方法那么就會返回NOBOOL flag = [p respondsToSelector:sel];NSLog(@"flag = %i", flag);// respondsToSelector注意點: 如果是通過一個對象來調用該方法那么會判斷該對象有沒有實現-號開頭的方法// 如果是通過類來調用該方法, 那么會判斷該類有沒有實現+號開頭的方法SEL sel1 = @selector(test);flag = [p respondsToSelector:sel1];NSLog(@"flag = %i", flag);flag = [Person respondsToSelector:sel1];NSLog(@"flag = %i", flag);2.SEL類型的第二個作用, 配合對象/類來調用某一個SEL方法
SEL sel = @selector(demo);Person *p = [Person new];// 調用p對象中sel類型對應的方法 [p performSelector:sel];SEL sel1 = @selector(signalWithNumber:);// withObject: 需要傳遞的參數// 注意: 如果通過performSelector調用有參數的方法, 那么參數必須是對象類型,// 也就是說方法的形參必須接受的是一個對象, 因為withObject只能傳遞一個對象[p performSelector:sel1 withObject:@"13838383438"];SEL sel2 = @selector(setAge:);[p performSelector:sel2 withObject:@(5)];NSLog(@"age = %i", p.age);// 注意:performSelector最多只能傳遞2個參數SEL sel3 = @selector(sendMessageWithNumber:andContent:);[p performSelector:sel3 withObject:@"138383438" withObject:@"abcdefg"];3.配合對象將SEL類型作為方法的形參
// 在Person方法中實現 - (void)makeObject:(id)obj andSel:(SEL)sel {[obj performSelector:sel]; }// 將sel作為形參傳遞Car *c = [Car new];SEL sel = @selector(run);Person *p = [Person new];[p makeObject:c andSel:sel];return 0;?
轉載于:https://www.cnblogs.com/XXxiaotaiyang/p/5025590.html
總結
- 上一篇: 服务器sel信息是什么意思,英特尔?服务
- 下一篇: linux系统运行程序设计,seL4的编