感谢本群 【天空air_as3_北京】 兄弟的投稿,当天说分享,马上就发来了,还附上完整的Demo代码
下面是该兄的分享内容:
反射的原理,是对我们创建对象的探知、自审。作用简单的说就是可以动态加载和处理一些事务。
【天空air_as3_北京】写的代码片段:
+(Tween *)to:(UIView *)target duration:(float)dur vars:(NSObject *)params tweenName:(NSString *)tweenName
{
if(target == nil) return nil;
if (!all) {
all = [[NSMutableDictionary alloc] init];
}
id tweenParamsClass = [params class];
unsigned int count,i;
objc_property_t *properties = class_copyPropertyList(tweenParamsClass,&count);
objc_property_t p;
Tween *t = [[Tween alloc] init];
NSMutableArray *propNames = [[NSMutableArray alloc] init];
NSMutableArray *propValues = [[NSMutableArray alloc] init];
for (i = 0; i<count; i++)
{
p = properties[i];
NSString *propName = [NSString stringWithUTF8String:property_getName(p)];
id value = [params valueForKey:propName];
if(value)
{
[propNames addObject:propName];
[propValues addObject:value];
}
}
free(properties);
[t createTween:target propNameAry:propNames propAry:propValues tweenName:tweenName];
return t;
}
/***********************华丽的分割线********************************/
补充几个反射的使用情景,仅供参考
SEL selector = NSSelectorFromString(@"testMethod:");
NSObject obj = ...;
1、[object performSelector:selector withObject:@"param"]
2、IMP imp = [[My Classclass] instanceMethodForSelector:selector];
imp(obj, selector, @"param");
3、objc_msgSend(obj,tempSel,@"12345");
4、NSInvocation
在ios直接调用某个对象的消息是方法有两种:
1.performselector: withObject: 简单的常用的调用方式
2.invocation 当参数>2个或者有返回值的时候,可能用这个会更便捷
NSInvocation可以处理参数和返回值,其实NSInvocation就相当于反射操作。