如何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和反射的更多相关文章

  1. NSObject和反射2

    NSObject和反射2. commend +R  run id stu=[Student student]; // –>   Student *stu=[Student student]; : ...

  2. [OC Foundation框架 - 16] NSObject和反射

    1.判断某个对象是否属于一个类 Student *stu = [[[Student alloc] init] autorelease]; BOOL result= [stu isKindOfClass ...

  3. Object-c 语法 - NSObject常用方法和反射

    NSObject常用方法 - (BOOL)isKindOfClass:(Class)aClass //判断是否为aClass或者aClass的子类的实例,aClass可以通过[类名 class]获取 ...

  4. NSObject常用方法和反射

    // 类的反射    NSString *str = @"Person";    Class class = NSClassFromString(str);        Pers ...

  5. IOS_反射

    // // PJReflect.m // 新浪微博 // // Created by pj on 14-8-8. // Copyright (c) 2014年 pj. All rights reser ...

  6. objective-c(反射)

    objective-c中提供类似JAVA的反射特性,给出基本例子如下: #import <Foundation/Foundation.h> @interface ClassA : NSOb ...

  7. swift 学习(二)基础知识 (函数,闭包,ARC,柯里化,反射)

    函数 func x(a:Int, b:Int)  {}   func x(a:Int, b:Int) -> Void {}  func x(a:Int, b:Int) ->(Int,Int ...

  8. Objective-C 中基于RunTime实现的反射

    一.反射 反射,一般表现在字符串和Class转换,字符串和内部方法转换,字符串和属性的转换(取值和赋值). 二.Objective-C中的反射 OC的反射是基于其Runtime实现的. 以执行某个函数 ...

  9. ios反射

    http://www.cr173.com/html/18677_1.html 1.反射获取类属性名和属性类型 unsigned ; objc_property_t *properties = clas ...

随机推荐

  1. 第一章、web应用安全概论--web应用系统介绍--TCP/IP协议

    TCP/IP协议源于1969年,是国际互联网Internet采用的协议标准TCP/IP协议是一组通信协议的代名词,是由一系列协议组成的协议族,本身是指两个协议集:    TCP--传输控制协议    ...

  2. 消息服务百科全书——为什么使用MQ

    为什么要使用MQ?有如下几个好处: 解耦 在项目启动之初来预测将来项目会碰到什么需求,是极其困难的.消息系统在处理过程中间插入了一个隐含的.基于数据的接口层,两边的处理过程都要实现这一接口.这允许你独 ...

  3. Git 集成 Araxis Merge 作为比较和合并GUI工具的配置 参考自https://www.kancloud.cn/leviio/git/369125

    Git 集成 Araxis Merge Win10下修改git全部配置文件方法Git 集成 Araxis Merge 作为比较和合并GUI工具的配置 那global对应的 ,gitconfig文件在哪 ...

  4. ADO与达梦7产生的一个未知问题

    采用OLEDB与达梦7建立数据库连接 连接成功 查询表成功 打开表成功 当进行到addnew 操作时  报异常,未知错误 而且是仅针对这张表 ,其他表都没有问题 当清空数据后可以再插入一次数据,之后就 ...

  5. “最不合格”的SAP应聘者: 从大学生到SAP成都研究院开发工程师

    让我们把时光之轮倒拨回2006年,SAP成都研究院刚刚成立的时候,有一位年轻的电子科技大学研究生,网名雷米兰(这名字一看就是AC米兰铁杆粉丝),加入了SAP成都研究院并被派遣到SAP德国总部进行实习. ...

  6. Redis的最常见面试问题

    Redis的那些最常见面试问题[转] 1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据 ...

  7. ulimit 命令详解 socket查看linux最大文件打开数

    ulimit 命令详解     Linux对于每个用户,系统限制其最大进程数.为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程数 可以用ulimit -a 来显示当前的各种用户进程限 ...

  8. Ubuntu Nginx Uwsgi Python布置服务器Django项目

     1 安装python 3.6 ubuntu预装了2.7,不需要卸载预装库,直接安装python3.6(其实现在的阿里云18.04会给你自动装python2.7.15和3.6.8) 你可以分别查看一下 ...

  9. RabbitMQ 功能

    学习完了rabbitmq总一下 RabbitMQ依赖的语言 erlang 第一它可以实现不同程序之间的程序信息储存交互,在易用性.扩展性.高可用性的方面不俗. rabbitmq相当于一个中间人,我们同 ...

  10. 07_Redis_Sorted Set命令

    一:Redis 有序集合(sorted set):有序set集合,专门用来做排行榜 Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员 ------- (有序不重复) 不 ...