美文网首页
iOS开发-Model利用runtime快速初始化

iOS开发-Model利用runtime快速初始化

作者: handsome丶亮 | 来源:发表于2020-03-15 20:52 被阅读0次

    1. 实体类中属性太多,如何进行快速初始化?

    现有如下类:

    • TestModel.h
    #import <Foundation/Foundation.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface TestModel : NSObject
    
    @property (nonatomic, copy) NSString *property1;
    
    @property (nonatomic, copy) NSString *property2;
    
    @property (nonatomic, copy) NSString *property3;
    
    @property (nonatomic, copy) NSString *property4;
    
    @property (nonatomic, copy) NSString *property5;
    
    @property (nonatomic, copy) NSString *property6;
    
    @end
    
    NS_ASSUME_NONNULL_END
    
    • TestModel.m中逐个初始化属性
    #import "TestModel.h"
    
    @implementation TestModel
    
    - (instancetype)init{
        self = [super init];
        if (self) {
            self.property1 = @"";
            self.property2 = @"";
            self.property3 = @"";
            self.property4 = @"";
            self.property5 = @"";
            self.property6 = @"";
        }
        return self;
    }
    
    @end
    

    2. 实现快速初始化的方法

    使用runtime初始化实体类,这样就不需要对每个属性进行初始化啦!

    1. NSObject分类中导入runtime头文件#import <objc/runtime.h>
    2. 在分类中添加如下方法
    - (void)makePropetiesValueEmptyString {
        unsigned int methodCount = 0;
        Ivar * ivars = class_copyIvarList([self class], &methodCount);
        for (unsigned int i = 0; i < methodCount; i ++) {
            Ivar ivar = ivars[i];
            // 获取属性名称
            NSString *propertyName = [NSString stringWithUTF8String:ivar_getName(ivar)];
            // 获取属性类型
            NSString *propertyType = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivar)];
            if ([propertyType containsString:@"String"]) {
                // 初始化类型为NSString的属性
                [self setValue:@"" forKey:propertyName];
            }
        }
        free(ivars);
    }
    
    1. TestModel.m中导入NSObject分类的头文件,并在init初始化方法中调用makePropetiesValueEmptyString方法即可。
    #import "TestModel.h"
    #import "NSObject+Assistant.h"
    
    @implementation TestModel
    
    - (instancetype)init{
        self = [super init];
        if (self) {
            [self makePropetiesValueEmptyString];
        }
        return self;
    }
    
    @end
    
    
    1. 这样实现之后,[TestModel new]或者[[TestModel alloc] init]的时候就会初始化全部NSString类型的属性了。

    相关文章

      网友评论

          本文标题:iOS开发-Model利用runtime快速初始化

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