IOS_利用反射获得类中的属性列表和Demo分享

感谢本群 【天空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就相当于反射操作。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章