//
// main.m
// Foundation(15)
//
// Created by Mac on 15-1-24.
// Copyright (c) 2015年 vxinyou. All rights reserved.
//
#import
#import "Student.h"
#pragma mark NSObject的常用方法
void objUse(){
Student *stu = [[[Student alloc] init] autorelease];
// isKindOfClass:判断对象是否属于某个类或者这个类的子类
if ([stu isKindOfClass:[NSObject class]]) {
NSLog(@"stu是一个NSObject对象或者NSObject子类对象");
}
// isMemberOfClass判断对象是否属于某个类(不包括子类)
BOOL result = [stu isMemberOfClass:[NSObject class]];
NSLog(@"result = %i", result);// 打印结果:0
// 直接调用Student的test方法
[stu test];
// 间接调用Student的test方法
[stu performSelector:@selector(test)];
// 间接调用Student的test2方法
[stu performSelector:@selector(test2:) withObject:@"abc"];
// 延迟2秒后调用test2:方法
[stu performSelector:@selector(test2:) withObject:@"abc" afterDelay:2];
}
#pragma mark OC中的反射
void reflect(){
NSString *str = @"Student";
// 类的反射。字符串变Class
Class class = NSClassFromString(str);
Student *stu = [[class alloc] init];
NSLog(@"stu = %@", stu);
// Class变字符串
NSString *name = NSStringFromClass([Student class]);
NSString *method = @"test";
// 方法的反射。字符串(方法名)变方法
SEL selector = NSSelectorFromString(method);
// 执行反射方法
[stu performSelector:selector];
// 方法变字符串(方法名)
NSString *selectorName = NSStringFromSelector(selector);
NSLog(@"selectorName = %@", selectorName);
[stu release];
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// objUse();
reflect();
}
return 0;
}
Foundation框架(15)——NSObject的常用方法、OC中的反射
最新推荐文章于 2018-07-20 00:41:26 发布