oc中的"反射"理解
来源:互联网 发布:mac软件宝箱10.7.5 编辑:程序博客网 时间:2024/05/18 16:19
原文引用:http://blog.csdn.net/victormokai/article/details/19631359
java中的反射就是在代码运行中才创建对象,可以获取其中的方法,修改其中的属性值,OC中,也可以进行类似的处理。
代码如下:
#import <Foundation/Foundation.h>@interface PersonTest : NSObject+(void) speak;@end
#import "PersonTest.h"@implementation PersonTest+(void) speak{ NSLog(@" i'm a person !");}@end
#import <Foundation/Foundation.h>#import "PersonTest.h"@interface StudentTest : PersonTest{ @private int age;}@property(nonatomic) int age;-(StudentTest *) initAge:(int) _age;-(void) hobby;-(void) getScore:(int) score;-(NSString *) getStudentName: (NSString *) studentName;@end
#import "StudentTest.h"@implementation StudentTest@synthesize age;-(StudentTest *) initAge:(int) _age{ self = [super init]; if(self){ self.age = _age; } return self;}-(void) hobby{ NSLog(@"学生喜欢玩游戏, 上体育课。");}-(void) getScore:(int) score{ NSLog(@"获取学生的分数---%d",score);}-(NSString *) getStudentName: (NSString *) studentName{ NSLog(@"这个学生的名字----%@",studentName); return studentName;}@end
OC中自带方法来进行“反射”处理。
// 反射 创建对象 Class className = NSClassFromString(@"StudentTest"); // 类适 Class.forName(className) StudentTest *stu = [[className alloc] init]; NSLog(@"%@",stu); // 2、-(BOOL)isKindOfClass:(Class)aClass; 判断对象是不是属于指定类型或其子类 Boolean flag = [stu isKindOfClass:[PersonTest class]]; NSLog(@"%d",flag); if (flag) { NSLog(@"studentTest 是 personTest的子类"); }else{ NSLog(@"studentTest 不是 personTest的子类"); } // 3、- (BOOL)isMemberOfClass:(Class)aClass 判断对象是不是属于指定类型 Boolean boolFlag = [stu isMemberOfClass:[PersonTest class]]; NSLog(@"%d",boolFlag); if(boolFlag){ NSLog(@"stu 是 PersonTest 类型"); }else{ NSLog(@"stu 不是 PersonTest 类型"); } // 4、- (BOOL)respondsToSelector:(SEL)aSelector 判断类型或对象有没有某个方法 Boolean bool_flag = [stu respondsToSelector:@selector(hobby)]; // 没有参数的方法 NSLog(@"%d",bool_flag); if (bool_flag) { NSLog(@"studentTest 类中有 hobby这个方法"); }else{ NSLog(@"studentTest 类中没有这个 hobby这个方法"); } Boolean score_flag = [stu respondsToSelector:@selector(getScore:)]; // 带有参数的方法 NSLog(@"%d",score_flag); //同时,对于@selector 还可以通过 字符串生成出来。 SEL sel_flag = NSSelectorFromString(@"getScore:"); Boolean sel_score_flag = [stu respondsToSelector:sel_flag]; NSLog(@"换种方式来进行显示----%d",sel_score_flag); // 5、- (id)performSelector:(SEL)aSelector 动态调用对象的方法 [stu performSelector:@selector(hobby)]; //调用无参函数 [stu performSelector:@selector(getStudentName:) withObject:@"小强"]; // 调用有参函数 // - (BOOL)conformsToProtocol:(Protocol *)aProtocol; 判断对象是否实现某个Protocol协议
在这些中其中需要注意的是
- (id)performSelector:(SEL)aSelector 动态调用对象的方法。 同时他和后面的IOS中的线程也有关联,先mark一下。
</pre><pre name="code" class="objc">运行结果如下:
2015-01-01 20:38:46.373 OC基础学习[779:43297] <StudentTest: 0x100202050>
2015-01-01 20:38:46.374 OC基础学习[779:43297] 1
2015-01-01 20:38:46.374 OC基础学习[779:43297] studentTest是 personTest的子类
2015-01-01 20:38:46.374 OC基础学习[779:43297] 0
2015-01-01 20:38:46.374 OC基础学习[779:43297] stu不是 PersonTest类型
2015-01-01 20:38:46.375 OC基础学习[779:43297] 1
2015-01-01 20:38:46.375 OC基础学习[779:43297] studentTest类中有 hobby这个方法
2015-01-01 20:38:46.375 OC基础学习[779:43297] 1
2015-01-01 20:38:46.375 OC基础学习[779:43297]换种方式来进行显示----1
2015-01-01 20:38:46.375 OC基础学习[779:43297]学生喜欢玩游戏,上体育课。
2015-01-01 20:38:46.375 OC基础学习[779:43297]这个学生的名字----小强
- oc中的"反射"理解
- 8、OC中的“反射”
- OC中的反射机制
- 8、OC中的“反射”
- OC 反射机制的理解(1)
- 理解oc中的一些概念
- OC中的self、super理解
- java中的反射简单理解
- 对OC中的闭包(Block)理解
- 如何理解C#中的反射机制
- c#中的反射要怎样理解
- c#中的反射要怎样理解?
- C#中的反射怎么理解啊
- 黑马程序员 java中的反射技术理解
- 关于java中的反射机制理解!
- 理解Android中的注解与反射
- 对java语言中的反射的理解
- JAVA中的反射机制理解与浅析
- Eclipse导入Tomcat源码
- 走过的路,做过的事——我的2014
- linux解压zip乱码解决方案
- 32位汇编语言学习笔记(27)--HexDump3程序
- javascript在myeclipse中报错的解决方法
- oc中的"反射"理解
- Linux命令(三)——文本编辑器应用
- 告别jsp+servlet开发中,配置web.xml的烦恼
- 解决Google Chrome设置默认浏览器后, 没有注册类的提示
- java基础第二天
- CentOS 更改MySQL数据库目录位置
- LeetCode Add Two Numbers
- XAMMP
- Linux的挂载