好久没有总结过了,一直在赶项目。。。
今天来总结一下OC中的反射机制,有什么不对的地方,还请多多海涵。
反射机制,简单的说就是在程序运行期间通过类的名字来动态的获取类的信息,从而实现动态的创建类,以及动态的调用类的方法等。
当我们在编码的时候不知道要创建哪个类的对象,需要在运行期间根据配置文件来获取我们要创建的对象的类的名字。这时候我们就可以通过反射机制,在程序运行期间通过类的名字获取类的信息。
OC中常用的反射机制的几种方法,基本上都在Founditon框架和NSObjct类的方法列表里面。
1.NSObjct类中的方法
1. isKindOfClass
该方法用于判断一个对象是不是一个类或者这个类的字类的实例对象。
2. isMemberOfClass
该方法用于判断一个对象是不是一个类的实例对象
3.conformsToProtocol
该方法用于判读一个对象是否遵循了一个协议
4.respondsToSelector
该方法用于判断一个对象是否实现了这个方法
2.Foundation (NSObjCRuntime.h)
1. NSStringFromSelector
该方法可以动通过一个 SEL 获取方法的名字
2. NSSelectorFromString
该方法可以通过方法的名字获取对应的 SEL
除了这种方法还可以通过下面的方面来获取
1、@Selector()
3. NSStringFromClass
该方法可以获取类的名字
4. NSClassFromString
该方法可以根据一个类的名字获取到这个类
除了这种方法,我们还可以通过下面的方法获取类的名字
1、[self class];
2、[Class class];
动态调用方法
1、[self performSelector:(id) withObject:(id)];
2、objc_msgSend(self,SEL,parameters)