Object-C-Foundation-反射

主要方法和类型

Class 变量名 = [类或者对象 class];

Class 变量名  = [类或者对象 superclass];

Class 变量名  = NSClassFromString(方法名字的字符串);

NSString *变量名 = NSStringFromClass(Class 参数);

•通过类名的字符串形式实例化对象

Class class = NSClassFromString(@"Student");

id obj = [[class alloc]init];

NSLog(@"创建的对象为: %@",obj);

将类名转换为字符串

NSString *className = NSStringFromClass(class);

NSLog(@"类名:%@",className);

对象在运行时获取其类型的能力称为内省

ObjC具有很多动态特性

而在实际使用中,使用introspection来确定该对象的实际所属类:

NSObject 提供了一些简单的查询运行时系统信息的方法:

- (BOOL)isKindOfClass:(Class)aClass

判断对象是不是属于指定类型或其子类

- (BOOL)isMemberOfClass:(Class)aClass

判断对象是不是属于指定类型

+ (BOOL)isSubclassOfClass:(Class)aClass;

判断一个类型是否是另一个类型的子类型

- (BOOL)conformsToProtocol:(Protocol *)aProtocol;

判断某个类/对象是否实现某个协议

使用@protocol封装后传入

// - (BOOL)conformsToProtocol:(Protocol *)aProtocol;

[student conformsToProtocol:@protocol(MyProtocol)];

// 或者使用类方法

// + (BOOL)conformsToProtocol:(Protocol *)protocol;

[Student conformsToProtocol:@protocol(MyProtocol)];

对象复合(composition),即对象中又包含对象,表达的时“has a”的关系;

向对象中的对象发送消息:使用嵌套的中括号,如:

[tom cardWithNumber:9999]draw:1000];

访问对象中的对象的属性,使用连续的点操作符,如:

tom.car.balance

注意:中括号和点操作符不能同时使用!!

时间: 2024-08-11 12:55:59

Object-C-Foundation-反射的相关文章

【Object C】 反射机制

Object-C 也提供了类似Java的反射机制.通过以下三种方式与运行环境交互: 1.直接通过Object-C源代码 2.通过NSObject中定义的方法: isKindOfClass isMemberOfClass responseToSelector:判断该实例是否调用指定方法 3.直接调用运行时函数进行动态编程 #import <Foundation/Foundation.h> #import "DCApple.h" int main(int argc, const

程序集加载与反射

目录 程序集加载 获取类型信息 构造类型实例 通过反射发现成员 调用成员 一.程序集加载 Load方法:CLR通过调用System.Rreflection.Assemblly类的静态方法来显示加载程序集. public static Assembly Load(AssemblyName assemblyRef); public static Assembly Load(string assemblyString); LoadFrom方法:同样我们可以使用 远程加载程序集.此方法首先打开程序集,并

JavaEE之反射

反射定义简单表述: 对于任意一个(动态的)运行中的类,我们都可以解剖它,获取类中的构造方法,成员变量,成员方法. 类的加载 (1)加载 就是指将class文件读入内存,并为之创建一个Class对象. 任何类被使用时系统都会建立一个Class对象 (2)连接 验证是否有正确的内部结构,并和其他类协调一致 准备负责为类的静态成员分配内存,并设置默认初始化值 解析将类的二进制数据中的符号引用替换为直接引用 (3)初始化 1. 创建类的实例 2. 类的静态变量,或者为静态变量赋值 3. 类的静态方法 4

.NET基础 (17)反射

反射1 请解释反射的基本原理和其实现的基石2 .NET提供了哪些类型来实现反射3 如何实现动态地发射程序集4 如何利用反射来实现工厂模式 反射1 请解释反射的基本原理和其实现的基石 反射是一种动态分析程序集.模块.类型.字段等目标对象的机制,它的实现依托于元数据.元数据是存储在PE文件中的数据块,它详细记录了程序集后模块内部的结构.引用类型.程序集和清单. 2 .NET提供了哪些类型来实现反射 在System.Reflection命名空间下,.NET提供了丰富的实现反射机制的类型,可以达到读取元

面向对象之反射及内置方法

一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被类调用,就像正常调用函数一样 类方法和静态方法的相同点:都可以直接被类调用,不需要实例化 类方法和静态方法的不同点: 类方法必须有一个cls参数表示这个类,可以使用类属性 静态方法不需要参数 绑定方法:分为普通方法和类方法 普通方法:默认有一个self对象传进来,并且只能被对象调用-------绑定

day27 反射、内置方法

一.isinstance和issubclass class Foo: pass class Son(Foo): pass s = Son() #判断一个对象是不是这个类的对象,传两个参数(对象,类) # print(isinstance(s,Son)) # print(isinstance(s,Foo)) # print(type(s) is Son) # print(type(s) is Foo) #判断一个类是不是另一类的子类,传两个参数(子类,父类) print(issubclass(So

反射——反射API,使用反射创建数组

反射API Java.lang.Reflect库 ①   Class类与Java.lang.Reflect类库一起对反射的概念进行支持. ②   java.lang包下: a)         Class<T>:表示对一个正在运行的Java应用程序中的类和接口,是Reflection的起源. ③   java.lang.reflect包下: a)         Field类:代表类的成员变量(成员变量也称类的属性). b)         Method类:代表类的方法. c)        

java_ _反射

Java语言的反射机制初步学习 首先看下基本概念: (一)在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的.这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制. Java 反射机制主要提供了以下功能: ①:在运行时判断任意一个对象所属的类.       ②:在运行时构造任意一个类的对象.          ③:在运行时判断任意一个类所具有的成员变量和方法.     

学iOS开发(一)——实现一款App之Foundation框架的使用

当你着手为你的应用编写代码的时候,你会发现有许多可供使用的Objective-C的框架类,其中尤其重要的就是基础框架类,它为平台所有的应用提供基础服务.基础框架类中包括了表示字符串和数字等基本数据类型的值类(value classes),也有用来存储其他对象的集合类(collection classes).你将会依赖值类和集合类为你的ToDoList app编写大量代码. 值对象(Value Objects) Foundation框架提供了生成字符串.二进制数据.日期和时间.数字以及其他值对象的

C#的反射机制

using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Reflection; namespace codeTest { class Program { static void Main(string[] args) { string str = "Hello"; //C#中基于System.Type的反射 Type t = str.G