NSObject和反射
如何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];
}
NSObject和反射的更多相关文章
- NSObject和反射2
NSObject和反射2. commend +R run id stu=[Student student]; // –> Student *stu=[Student student]; : ...
- [OC Foundation框架 - 16] NSObject和反射
1.判断某个对象是否属于一个类 Student *stu = [[[Student alloc] init] autorelease]; BOOL result= [stu isKindOfClass ...
- Object-c 语法 - NSObject常用方法和反射
NSObject常用方法 - (BOOL)isKindOfClass:(Class)aClass //判断是否为aClass或者aClass的子类的实例,aClass可以通过[类名 class]获取 ...
- NSObject常用方法和反射
// 类的反射 NSString *str = @"Person"; Class class = NSClassFromString(str); Pers ...
- IOS_反射
// // PJReflect.m // 新浪微博 // // Created by pj on 14-8-8. // Copyright (c) 2014年 pj. All rights reser ...
- objective-c(反射)
objective-c中提供类似JAVA的反射特性,给出基本例子如下: #import <Foundation/Foundation.h> @interface ClassA : NSOb ...
- swift 学习(二)基础知识 (函数,闭包,ARC,柯里化,反射)
函数 func x(a:Int, b:Int) {} func x(a:Int, b:Int) -> Void {} func x(a:Int, b:Int) ->(Int,Int ...
- Objective-C 中基于RunTime实现的反射
一.反射 反射,一般表现在字符串和Class转换,字符串和内部方法转换,字符串和属性的转换(取值和赋值). 二.Objective-C中的反射 OC的反射是基于其Runtime实现的. 以执行某个函数 ...
- ios反射
http://www.cr173.com/html/18677_1.html 1.反射获取类属性名和属性类型 unsigned ; objc_property_t *properties = clas ...
随机推荐
- django 中静态文件项目加载问题
问题描述: django项目中创建了多个app后,每个app中都有对应的static静态文件.整个项目运行时这些静态文件的加载就是一个问题,因为整个项目我只参与了一部分,项目部署之类的并没有参与.我写 ...
- 第10章:深入浅出Ansible
1.Ansible介绍 1).Ansible的优点 Ansible是一个简单的自动化引擎,可完成配置管理.引用部署.服务编排以及其他各种IT需求 Ansible是Python开发并实现的开源软件,其依 ...
- 7.Linux查找目录下的所有文件中是否含有某个字符串
grep -rn "map" * 说明:-r 是递归查找-n 是显示行号* : 表示当前目录所有文件,也可以是某个文件名
- Task资料
5天玩转C#并行和多线程编程:http://www.cnblogs.com/yunfeifei/p/3993401.html
- scroll滚动条掩藏
掩藏scroll滚动条::-webkit-scrollbar ::-webkit-scrollbar {} /* 1 */ ::-webkit-scrollbar-button {} /* 2 */ ...
- 80C51串行口
串行通信是指 使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度 单工.半双工.全双工 单工数据传输只支持数据在一个方向上传输 半双工数据传输允许数据在两个方向上传输,但是,在 ...
- JPA中的主键生成策略
通过annotation(注解)来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue设定的.这里的@id和@Gen ...
- python监控CPU/内存/磁盘,超过指定百分比,发送邮件
#!/usr/bin/python #coding:utf-8 #导入psutil模块 import psutil import yagmail def mail(subject,contents): ...
- Spark集群任务提交流程----2.1.0源码解析
Spark的应用程序是通过spark-submit提交到Spark集群上运行的,那么spark-submit到底提交了什么,集群是怎样调度运行的,下面一一详解. 0. spark-submit提交任务 ...
- elasticsearch 数据备份
ES数据备份找了一些方法,发现elasticdump 这个工具不错 elasticdump --input=http://192.168.0.92:9200/hs2840 --output ./hs2 ...