如何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. MySQL优化 - 性能分析与查询优化(转)

    出处:  MySQL优化 - 性能分析与查询优化 优化应贯穿整个产品开发周期中,比如编写复杂SQL时查看执行计划,安装MySQL服务器时尽量合理配置(见过太多完全使用默认配置安装的情况),根据应用负载 ...

  2. 第九章 MIZ702 ZYNQ片上ADC的使用

      9.0难度系数★☆☆☆☆☆☆ 9.1实验概述 这次借助zynq的内嵌的XADC来采集zynq内部的一些参数: •VCCINT:内部PL核心电压 •VCCAUX:辅助PL电压 •VREFP:XADC ...

  3. hdu 1113 简单字符处理问题

    #include <map> #include <cstdio> #include <iostream> #include <string> #incl ...

  4. MySQL修改和查看表类型

    //修改表类型alter table verify_code engine = MEMORY;//查看表类型show create table verify_code;

  5. 微信小程序手动实现select下拉框选择

    在小程序中没有像h5中的下拉 标签的 picker又满足部了,那就自己动手写 <view class='list-msg'> <view class='list-msg1'> ...

  6. Browser Security-超文本标记语言(HTML)

    Browser Security-超文本标记语言(HTML) 瞌睡龙 · 2013/06/19 18:55 重要的4个规则: 1 &符号不应该出现在HTML的大部分节点中. 2 尖括号< ...

  7. JS和jQuery用法区别

    目录 JS和jQuery用法区别 外观区别 查找元素 操作标签 操作内容 操作属性 操作位置 操作样式 事件 JS和jQuery用法区别 外观区别 jQuery与JS最直观的区别就是外观上jQuery ...

  8. shell读取或者修改ini文件

    cfg_find(){ file_name=$1 labelname=$2 key=$3 labelline=$(grep -n "^\[.*\]$" $file_name | a ...

  9. 牛客练习赛53 E 老瞎眼 pk 小鲜肉 (线段树,思维)

    链接:https://ac.nowcoder.com/acm/contest/1114/E来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...

  10. gerapy+scrapyd组合管理分布式爬虫

    Scrapyd是一款用于管理scrapy爬虫的部署和运行的服务,提供了HTTP JSON形式的API来完成爬虫调度涉及的各项指令.Scrapyd是一款开源软件,代码托管于Github上. 点击此链接h ...