反射的强大之处在于,我们可以将对象与依赖对象之间完全解耦,创建对象可以不引用头文件,操作属性、方法可以不依赖于对象,操作对象可以不依赖于类型,操作类型可以不依赖于引用等等等等。最直观的效果是,即使不引用头文件亦可操作类型、对象及对应属性与方法。
借助强大的runtime特性,在iOS平台上我们也得以实现反射。
//使用前需要先引用runtime头文件
#import <objc/runtime.h>
在这里,我们创建一个示例类型IPZClassOne
并声明四个有代表性的方法。
@interface IPZClassOne : NSObject
+ (void) classMethod; //类型方法
+ (IPZClassOne*) getSingleLeton; //单例
- (void) instanceMethod; //实例方法
- (void) onFinshedHandler:(NSString *) completeHandler;//含参数方法
@end
类型反射
获取类型分为两种,通过对象获取和通过类型名称获取。
- 通过对象获取:
Class class = [self class];