#pragma mark NSObject常用方法
// 判断是否为aClass或者aClass的子类的实例
- (BOOL)isKindOfClass:(Class)aClass;
// 判断是否为aClass的实例(不包括aClass的子类)
- (BOOL)isMemberOfClass:(Class)aClass;
// 判断对象是否实现了aProtocol协议
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
// 判断这个类的对象是否拥有参数提供的方法
- (BOOL)respondsToSelector:(SEL)aSelector;
// 取消执行
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument;
@代码示例:
Student *stu = [[[Student alloc] init] autorelease];
// isKindOfClass判断对象是否属于某个类 或者 子类
if ( [stu isKindOfClass:[Person class]] ) {
// NSLog(@"stu属于Person或者继承自Person");
}
// isMemberOfClass判断对象是否属于某个类(不包括子类)
BOOL result = [stu isMemberOfClass:[Student class]];
// NSLog(@"%i", result);
// 假设Student里面有了test方法和test:方法
// 直接调用
[stu test];
// 间接调用
[stu performSelector:@selector(test)];
// 间接带参数调用
[stu performSelector:@selector(test2:) withObject:@"abc"];
// 延迟2秒后调用test2:方法
[stu performSelector:@selector(test2:) withObject:@"abc" afterDelay:2];
#pragma mark 反射
// 类的反射
NSString *str = @"Person";
Class class = NSClassFromString(str);
Person *person = [[class alloc] init];
NSLog(@"%@", person);
// Class变成字符串
NSString *name = NSStringFromClass([Person class]);
// 方法的反射
NSString *method = @"test";
SEL selector = NSSelectorFromString(method);
[person performSelector:selector];
// 将SEL转换为字符串
NSString *selectorName = NSStringFromSelector(selector);