最近做了个动态更新模块的功能,是使用动态库来完成的。因为要求动态更新所以就不方便引入头文件了这里就只好采用动态调用动态库的方法了。具体包含以下几个方面:创建对象并设置属性值,调用对象的方法这个方法包括类方法(静态方法)和对象方法,设置对象的代理并实现代理方法。
在一切开始之前我们要先加载动态库这个在前面的博客中有说明的感兴趣的可以去看看。
首先创建对象这个很简单OC中有个方法NSClassFromString(NSString *aClassName)
,官方解释为:Obtains a class by name,通过类名获取类。然后我们可以通过类创建对象了,这个创建出来的对象是id类型的。
Class FWPayParam = NSClassFromString(className);
_param = [[FWPayParam alloc] init];
对象创建出来了我们要给它赋值,这里我采用的方法是再创建一个类FanWeiPayParam,这个类的属性跟FWPayParam一样然后我们通过对象直接赋值,接下来看具体实现:
- (void)copy:(id)payParam {
//定义无符号int类型
unsigned int outCount,count;
//获取包含指定类公开的属性名地址(不包括这个类的父类属性)的数组,outCount数组长度
objc_property_t *property = class_copyPropertyList([self class], &outCount);
//遍历数组
for (count = 0; count<outCount; count++) {
objc_property_t t = property[count];
//获取属性名
NSString *key = [NSString stringWithUTF8String:property_getName(t)];
//获取属性名对应的属性值
id value = [self valueForKey:key];
//设置属性和属性值</