这些日子在家里学习runtime,看runtime的一些方法和前辈们的博客,我也尝试着写几个runtime有效的运用

一、给对象属性赋值,例如一个WebEntity类

她有三个属性:NSString、NSInteger

#import "WebEntity.h"  // 假设是一个网络数据返回实体类

@interface WebEntity ()
@property (nonatomic, strong) NSString *string;  // O-C字符串类
@property (nonatomic, assign) NSInteger number;  // NSInteger类型
@end

运用runtime来给property赋值

1》Responsed数据类型假设是NSDictionary类型:

NSDictionary * responsedData =  @{

                                      };

2》赋值函数

public:

/**
 *  model赋值
 *
 *  @param instance 被赋值的instance对象
 *  @param params   赋值的params参数
 */
- (void)setDataForKeyWithInstance:(id)instance params:(NSDictionary *)params
{
    [params enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop)
    {
        if ([self checkIsExistPropertyWithInstance:instance verifyPropertyName:key])
        {
            [instance setValue:obj forKey:key];
        }
    }];
}

private:

/**
 *  检查对象中是否有制定属性名
 *
 *  @param instance           被检查的对象
 *  @param verityPropertyName 检查的属性名称
 *
 *  @return 检查有无返回值,有YES反之NO
 */
- (BOOL)checkIsExistPropertyWithInstance:(id)instance verifyPropertyName:(NSString *)verityPropertyName
{
    unsigned int outCount , i ;

    objc_property_t * properties = class_copyPropertyList([instance class], &outCount);
    ; i < outCount; i++)
    {
        objc_property_t property = properties[i];
        NSString * propertyName = [[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
        if ([propertyName isEqualToString:verityPropertyName])
        {
            free(properties);
            return YES;
        }
    }
    free(properties);
    return NO;
}

3》代码应用:

WebEntity * entity = [WebEntity new];

NSDictionary * responsedData =  @{

@"string":@"字符串类型",

@"number":@5

};

[self setDataForKeyWithInstance:entity params:responsedData];

NSLog(@"%@ - %d",entity.string,entity.number);

结果:

-- :::] 字符串类型 - 

bwy:

目前支持的是O-C的数据类型 NSDictionary、 NSArray、等

runtime使用小例子 - 给对象O-C属性赋值的更多相关文章

  1. 运行时给java对象动态的属性赋值

    运行时给java对象动态的属性赋值 如何给java对象动态的属性赋值(也就是在代码执行的时候才决定给哪个属性赋值)         1.自定义一个工具类ReflectHelper,代码如下所示: pa ...

  2. 使用C#表达式树为两个对象的相同属性赋值

    //缓存表达式树 private static Dictionary<string, object> objCache = new Dictionary<string, object ...

  3. 我写的RunTime函数之一,为类的某个属性赋值以及方法交换

      1,为属性赋值 #import <UIKit/UIKit.h> @interface UIViewController (RunTime) - (BOOL)setPropertyVal ...

  4. 将对象a的属性赋值给对象b

    BeanUtils.copyProperties(a,b); 将a的属性赋值给b(ab的共同属性)

  5. 微信小程序:给data中对象中的属性设置值与给data中的属性或对象或数组设置值的区别

    一.给data中的属性或对象或数组设置值,属性名不需要加引号 this.setData({ material: param, // 这里material为对象 } this.setData({   d ...

  6. 【Java EE 学习 69 上】【struts2】【paramsPrepareParamsStack拦截器栈解决model对象和属性赋值冲突问题】

    昨天有同学问我问题,他告诉我他的Action中的一个属性明明提供了get/set方法,但是在方法中却获取不到表单中传递过来的值.代码如下(简化后的代码) public class UserAction ...

  7. MyBatis拦截器:给参数对象属性赋值

    该拦截器的作用:在进行增加.修改等操作时,给数据模型的一些通用操作属性(如:创建人.创建时间.修改人.修改时间等)自动赋值. 该实现是在DAO层拦截,即存入DB前最后一层.后经分析,不是很合理,改为在 ...

  8. Runtime的几个小例子(含Demo)

    一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.)           1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数);  [runti ...

  9. ASP.NET Cookie对象到底是毛啊?(简单小例子)

    记得刚接触asp.net的时候,就被几个概念搞的头痛不已,比如Request,Response,Session和Cookie.然后还各种在搜索引擎搜,各种问同事的,但是结果就是自己还是很懵的节奏. 那 ...

随机推荐

  1. 3DMax 物体选择方法

    全选: Ctrl + A, 取消选择:Ctrl +D 加选:ctrl+鼠标左键:减选:alt+鼠标 窗口与交叉:下面红框内的右边的按钮, 是切换两种模式: 选择模式一:只要选框碰到物体边缘, 就可选中 ...

  2. bloom filter

    Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员. 结    构 二进制 召回率 ...

  3. MATLAB 中NORM运用

    格式:n=norm(A,p)功能:norm函数可计算几种不同类型的矩阵范数,根据p的不同可得到不同的范数 以下是Matlab中help norm 的解释 NORM   Matrix or vector ...

  4. java 中遍历hashmap 和hashset 的方法

    一.java中遍历hashmap:    for (Map.Entry<String, Integer> entry : tempMap.entrySet()) {     String ...

  5. [转]论acm与泡妞

    abstract :本文从各个方面讨论了泡妞与做题之间的相似之处与不同点,尽量的站在一个公平的角度阐述这一问题,所得的研究成果填补了国内外的理论空白. - 泡了一个好妞就好像做了一道难题一样快感都是相 ...

  6. android第三方框架 xlistview 的使用

    如今上拉刷新,下拉加载更多已经是浩如烟海的app的标配了 最近正好有相关的需要就去学习了一下,还是那句老话凡事都靠自己来 搞实在不是一件好事,费时费力不说可能还是在做无用功,不过自己研究学习 还是很有 ...

  7. 关于insert /*+ append*/ 各种insert插入速度比较

    来源于:http://www.cnblogs.com/rootq/archive/2009/02/11/1388043.html SQL> select count(*) from t;COUN ...

  8. android 入门笔迹(1)

    环境搭建JDK,JRE,Android SDK,ADT,Eclipse,安卓模拟器AVD xml控制UI界面  Java代码控制UI界面  XML与Java混合控制UI界面  UI:userinter ...

  9. androd Sdk manager配置

    Android Android SDK 配置步骤 启动 Android SDK Manager ,打开主界面,依次选择「Tools」.「Options...」,弹出『Android SDK Manag ...

  10. Android性能优化文章转载

    今天看到几篇比较好的文章就转了!(链接如下) 转载注明出处:Sunzxyong Android性能优化之Bitmap的内存优化 Android性能优化之常见的内存泄漏 Android最佳实践之Syst ...