// // main.m // Refect // // Created by Rayln Guan on 9/13/13. // Copyright (c) 2013 Rayln Guan. All rights reserved. // #import <Foundation/Foundation.h> #import "Student.h" #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { Student *stu = [[Student alloc] init]; //判断Student是否是Person的类或者子类 BOOL is = [stu isKindOfClass:[Person class]]; NSLog(@"%i", is); //判断Student是否是Person类(不包括子类) [stu isMemberOfClass:[Person class]]; //判断某个类是否实现了某个协议 //[stu conformsToProtocol:<#(Protocol *)#>] //判断某个类是否拥有参数提供的方法 [stu respondsToSelector:@selector(select)]; //间接调用方法 [stu performSelector:@selector(test1)]; [stu performSelector:@selector(test2:) withObject:@"abc"]; //延迟调用 [stu performSelector:@selector(test2:) withObject:@"abc" afterDelay:2]; #pragma mark - reflect //类名反射 NSString *str = @"Person"; Class class = NSClassFromString(str); Person *person = [[class alloc] init]; //Class变成字符串 NSString *name = NSStringFromClass([Person class]); //方法反射 NSString *method = @"test1"; SEL selector = NSSelectorFromString(method); [person performSelector:selector]; //将sel转化为字符串 NSString *method1 = NSStringFromSelector(selector); [person release]; } return 0; }
Person和 Student只是定义了test1和test2方法而已