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 ...
随机推荐
- Devexpress xaf用代码打开菜单(Navigation Item)
第一种:ViewController继承WindowController public abstract class MyWindowController : WindowController { p ...
- hdu 1113 简单字符处理问题
#include <map> #include <cstdio> #include <iostream> #include <string> #incl ...
- python 画正态曲线
import numpy as np import matplotlib.pyplot as plt import math # Python实现正态分布 # 绘制正态分布概率密度函数 u = 0 # ...
- *4.1 所有类型都从System.Object派生
- luogu1313计算系数题解--二项式定理
题目链接 https://www.luogu.org/problemnew/show/P1313 分析 二项式定理 \((a+b)^n=\sum_{k=0}^{n}{C^k_n a^k b^{n-k} ...
- luogu4777[模板]拓展中国剩余定理题解
题目链接 https://www.luogu.org/problemnew/show/P4777 分析 扩展\(CRT\)就是解决模数不互质的情况,说是扩展\(CRT\),其实都是扩欧... 先来考虑 ...
- 检查一个string是否包含List<string>中的任意一个
bool b = listOfStrings.Any(s=>myString.Contains(s)); 应用在where子句中的示例: //获取路径 var groupPaths = grou ...
- python读取ubuntu系统磁盘挂载情况
磁盘挂载 利用df -h 的命令 此功能主要实现了python 命令行执行函数进行解析df 返回的数据 代码如下 : # liunx 系统获取 磁盘挂载的情况 代码 #!/usr/bin/pyt ...
- 【Struts2】文件上传与下载
一.上传 1.1 Struts2实现步骤 浏览器端 服务器端 1.2 关于Struts2中文件上传细节: 1.3 示例 jsp文件 Action类 struts.xml文件配置 二.下载 2.1 文件 ...
- mysql tinyint(1) 在java中被转化为boolean
数据库表字段类型为:tinyint 长度为1 在java中对应的类型是boolean 查询时直接在页面展示成true或false 如果是2,3,4 这样的也是默认成true,非常不友好. 解决方案: ...