美文网首页
iOS反向编译出model类所有属性并赋值

iOS反向编译出model类所有属性并赋值

作者: isaaczcbj | 来源:发表于2019-03-20 10:26 被阅读0次

    目前开发中,面对大量的返回参数,几乎都是用YYModel来处理model类,但是有时难免要对model类的属性进行特殊处理,这里提供了一种通过运行时来处理model属性的方法:

    #import "TR_Model.h"

    #import

    @interfaceTR_Model (Extension)

    -(void)displayCurrentModleProperty;

    @end

    具体逻辑处理如下所示:

    #import "TR_Model+Extension.h"

    constNSString *propertiesKey =@"propertiesKey";

    @implementationTR_Model (Extension)

    ///通过运行时获取当前对象的所有属性的名称,以数组的形式返回

    - (NSArray *) allPropertyNames{

        ///存储所有的属性名称

        NSMutableArray *allNames = [[NSMutableArray alloc] init];

        ///存储属性的个数

        unsignedintpropertyCount =0;

        ///通过运行时获取当前类的属性

        objc_property_t *propertys = class_copyPropertyList([selfclass], &propertyCount);

        //把属性放到数组中

        for(inti =0; i < propertyCount; i ++) {

            ///取出第一个属性

            objc_property_t property = propertys[i];

      constchar* propertyName = property_getName(property);

        [allNames addObject:[NSString stringWithUTF8String:propertyName]];

        }

        ///释放

        free(propertys);

        returnallNames;

    }

    #pragma mark -- 通过字符串来创建该字符串的Setter方法,并返回

    - (SEL) creatGetterWithPropertyName: (NSString *) propertyName{

        //1.返回get方法: oc中的get方法就是属性的本身

        returnNSSelectorFromString(propertyName);

    }

    - (void) displayCurrentModleProperty{

        //获取实体类的属性名

        NSArray *array = [selfallPropertyNames];

        //拼接参数

        NSMutableString *resultString = [[NSMutableString alloc] init];

        for(inti =0; i < array.count; i ++) {

            //获取get方法

            SELgetSel = [selfcreatGetterWithPropertyName:array[i]];

            if([selfrespondsToSelector:getSel]) {

                //获得类和方法的签名

                NSMethodSignature *signature = [selfmethodSignatureForSelector:getSel];

                //从签名获得调用对象

                NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];

                //设置target

                [invocation setTarget:self];

                //设置selector

                [invocation setSelector:getSel];

                //接收返回的值

                NSObject *__unsafe_unretainedreturnValue =nil;

                //调用

                [invocation invoke];

                //接收返回值

                [invocation getReturnValue:&returnValue];

                if([returnValue isKindOfClass:[NSNull class]] || returnValue ==nil|| [returnValue isEqual:@""]) {

                    returnValue =@"--";

                }

                [selfsetValue:returnValue forKey:array[i]];

                [resultString appendFormat:@"%@\n", returnValue];

                NSLog(@"%@--%@",array[i],returnValue);

            }

        }

    }

    @end

    链接: 百度网盘 请输入提取码 提取码: iikg 

    相关文章

      网友评论

          本文标题:iOS反向编译出model类所有属性并赋值

          本文链接:https://www.haomeiwen.com/subject/utoamqtx.html