1.SEL 的定义
Description: Defines an opaque type that represents a method selector.
描述:定义了一个不透明的方法选择器。
typedef struct objc_selector *SEL是它的类型;它是一个映射到方法的C字符串,你可以通过Objc编译器命令@selector()或者Runtime系统的sel_registerName函数来获取一个SEL类型的方法选择器。通过SEL sel = NSSelectorFromString(@"setAge:"); 方法将SEL转化为字符串。
2)SEL 具体实现。从终端输入字符串,判断是是那个类,并且调用相应的方法。
// Dog.h
// test2
//
// Created by lishabai on 16/1/9.
// Copyright (c) 2016年 lishabai. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Dog : NSObject
- (void)run;
- (void)brak;
@end
//
// Dog.m
// test2
//
// Created by lishabai on 16/1/9.
// Copyright (c) 2016年 lishabai. All rights reserved.
//
#import "Dog.h"
@implementation Dog
- (void)run{
NSLog(@"dao run....");
}
- (void)brak{
NSLog(@"Won Won");
}
@end
//
// Cat.h
// test2
//
// Created by lishabai on 16/1/9.
// Copyright (c) 2016年 lishabai. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Cat : NSObject
- (void)run;
- (void)brak;
@end
//
// Cat.m
// test2
//
// Created by lishabai on 16/1/9.
// Copyright (c) 2016年 lishabai. All rights reserved.
//
#import "Cat.h"
@implementation Cat
- (void)run{
NSLog(@"cat run....");
}
- (void)brak{
NSLog(@"Miao Won");
}
@end
//
// main.m
// test2
//
// Created by lishabai on 16/1/9.
// Copyright (c) 2016年 lishabai. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Cat.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSArray *arrClass = [NSArray arrayWithObjects:@"Cat", @"Dog", nil ];
NSArray *arrSEL = [NSArray arrayWithObjects:@"run",@"brak" ,nil];
char ch[50];
char chSEL[50];
scanf("%s",ch);
getchar();
scanf("%s",chSEL);
printf("%s,%s",ch,chSEL);
for (int i = 0; i < arrClass.count; i++) {
if ([[NSString stringWithUTF8String:ch] compare:arrClass[i]] == NSOrderedSame) {
for (int j = 0; j < arrSEL.count; j++) {
if ([[NSString stringWithUTF8String:chSEL] compare:arrSEL[j]] == NSOrderedSame) {
Class clas = NSClassFromString(arrClass[i]);
SEL sel = NSSelectorFromString(arrSEL[j]);
[[[clas alloc]init] run];
}
}
}
}
}
return 0;
}