如何NSObject和反射

NSObject 常用方法

如何判断 某个对象是否属于某个类或子类

-(BOOL)isKindOfClass:(Class)aClass

判断是否为aClass的实例(不包括aClass的子类)

-(BOOl)isMemberOfClass:(Class)aClass

判断是否实现了aProtocol协议

-(BOOL)conformToProtocol:(Protocol)aProtocol

判断这个类的对象是否拥有参数提供的方法

+(BOOL)instancesRespondToSelector:(SEL)aSelector

判断对象是否拥有参数提供的方法

-(BOOL)respondsToSelector:(SEL)aSelector

延迟调用参数提供的方法,方法所需参数用withobject 传入

-(void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay


//创建Person类

//继承Person的Student类

main.m

#import “Student.h”//enough

id stu=[[[Student alloc]init]autorelease];//Student *stu

//判断类型

//class 方法  返回一个指向结构体的指针

//the following code will judge this object of stu belong to the class of Student

if([stu isKindOfClass:[Student class]]) //Student can be replaced by Person

{

NSLog(@”stu belonged to Person or inherit from Person ”);

}

//only belong can’t inherit

BOOL result=[stu isMumberOfClass:[Student class]]; //Person –>no


//Student.h

@interface Student:Person

-(void)test;

-(void)test1:(int)a;

@end

Student.m

@implementation Student

-(void)test{

NSLog(@”call test”);

}

-(void)test1:(int)a{

NSLog(@”call test1,%i”,a);

}

@end

main.m

// call directly

[stu test];

[stu test1:10];

//indirect call

[stu performSelector:@selector(test:)];

[stu performSelector:@selector(test2:) withObject:];

//只能修改test2

test2:(NSString )str

//最多两个参数

[stu performSelector:@selector(test2:) withObject:@”abc”];

//performSelector在哪个线程调用,test2就在哪个线程

//延迟调用

[stu performSelector:@selector(test2:) withObject:@”abc” afterDelay:2];

//看不到效果,因为命令行项目这个函数一调用完,就是main的结尾,主程序关闭,定时器还有个屁用


反射:根据字符串来实例化一个对象

void reflect(){

NSString *str=@”Person”;

Class class=NSClassFromString(str);

//实例化

Person *person=[[class alloc]init];

NSLog(@”%@”,person);

[person release];

}

最新文章

  1. FFmpeg数据结构:AVPacket解析
  2. T1加权像(T1 weighted image,T1WI)
  3. Altium Designer 出现错误提示(警告)adding items to hidden net GND/VCC
  4. cocos2d-x的lua脚本加载CocostudioUI两种方式
  5. tp 中关于大小写的问题
  6. website architecture
  7. av_interleaved_write_frame 网络不好的情况下返回较慢
  8. Castle IOC容器实践之FactorySupport Facility
  9. Android 自学之画廊视图(Gallery)功能和用法
  10. iOS开发——基本常识篇&各种控件默认高度
  11. 【Xamarin挖墙脚系列:使用Xamarin进行Hybrid应用开发】
  12. pod install后出现的错误
  13. 文件上传----FTP部署
  14. 【webpack】webpack-dev-server生猛上手——让我们来搭一个webpack的微服务器吧!
  15. 【二分图裸题】poj1325机器调度
  16. cocos dos命令
  17. FZU 1202
  18. 89C51单片机的学习
  19. Java--Inheritance constructor继承中的构造方法问题(二)
  20. Codeforces Round #456 (Div. 2)

热门文章

  1. pb菜单详解和MDI
  2. 教你如何进行移动端APP测试
  3. nginx做为web容器部署静态资源以及做负载均衡反向代理实现
  4. django+mysql(1)
  5. [转载]AdaBoost算法
  6. 虚拟机CentOS启动报错-entering emergency mode解决办法
  7. JS 发送弹幕
  8. Phoenix的jdbc封装
  9. 16.SpringMVC核心技术-文件上传
  10. lua table vs closure