您的位置:首页 > 移动开发 > Objective-C

Foundation框架(15)——NSObject的常用方法、OC中的反射

2015-01-24 23:25 435 查看
//
//  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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: