//
// main.m
// NSObject常用方法
//
// Created by LiuWei on 15/4/19.
// Copyright (c) 2015年 LiuWei. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
// NSObject常用方法
void methos();
// 反射
void reflect();
int main()
{
@autoreleasepool
{
// methos();
reflect();
}
return 0;
}
#pragma mark - NSObject常用方法
void methos()
{
@autoreleasepool
{
id stu = [[Student alloc]init];
// 判断对象是否属于指定的类型或其子类型 是返回 YES 不是返回 NO
if ([stu isKindOfClass:[Person class]])
{
NSLog(@"stu 是 Person 类 类型");
}
else
{
NSLog(@"stu 不是 Person 类 类型");
}
// 判断对象是否是当前类的一个实例, 是返回 YES, 子类或其它类返回 NO
if([stu isMemberOfClass:[Person class]])
{
NSLog(@"stu 是 Person类的一个实例");
}
else
{
NSLog(@"stu 不是 Person类的一个实例");
}
// 判断是否遵从了指定协议
if([stu conformsToProtocol:@protocol(NSObject)])
{
NSLog(@"yes");
}
else
{
NSLog(@"no");
}
// 判断是否实现了指定方法
if([stu respondsToSelector:@selector(func)])
{
[stu func];
}
// 间接调用方法
[stu performSelector:@selector(show)];
[stu performSelector:@selector(showNumber:) withObject:@22];
[stu performSelector:@selector(showNumber:) withObject:@"hello" afterDelay:2];
}
}
#pragma 反射
void reflect()
{
// 从字符串中获取类名创建对象
NSString *str = @"Person";
Class type = NSClassFromString(str);
id lilwei = [[type alloc]init];
NSLog(@"%@", lilwei);
// 把类名 转为字符串
NSString *myclass = NSStringFromClass([Person class]);
NSLog(@"%@", myclass);
// 方法的反射
NSString *method = @"show";
Student *stu = [[Student alloc]init];
[stu performSelector: NSSelectorFromString(method)];
}