1,为属性赋值

#import <UIKit/UIKit.h>

@interface UIViewController (RunTime)

- (BOOL)setPropertyValue:(id)propertyValue propertyName:(NSString *)propertyName ;

@end
#import "UIViewController+RunTime.h"

@implementation UIViewController (Change)

/**
给指定property赋值;若property不存在,则不做 @param propertyValue property值, propertyName:property的名字
*/
- (BOOL)setPropertyValue:(id)propertyValue propertyName:(NSString *)propertyName { BOOL isPropertyExist= NO;
unsigned int methodCount = ; Ivar * ivars = class_copyIvarList([self class], &methodCount);
for (unsigned int i = ; i < methodCount; i ++) {
Ivar ivar = ivars[i];
const char * name = ivar_getName(ivar);
const char * type = ivar_getTypeEncoding(ivar);
NSLog(@"%@拥有的成员变量的类型为%s,名字为 %s ",NSStringFromClass([self class]),type, name);
NSString *tempPropertyName = [[NSString alloc] initWithCString:name encoding:NSUTF8StringEncoding];
if([tempPropertyName isEqualToString:propertyName])
{
isPropertyExist = YES;
object_setIvar(self, ivar,propertyValue);
NSLog(@"object_setIvar:%@",object_getIvar(self, ivar));
break;
}
}
return isPropertyExist;
} @end

2,方法交换

#import <UIKit/UIKit.h>

@interface UIViewController (Reachability)

/**
将检测网络的函数替换,不做任何事情
使用方法:viewWillAppear中调用该函数,将EcoInitTools类中的reachabilityChanged方法实现替换成doNothing函数实现,
viewWillDisappear中再替换回来。
*/
- (void)changeReachability; @end #import "UIViewController+Reachability.h" @implementation UIViewController (Reachability) + (void)load {
EcoLog(@"UIViewController (Reachability):%@",NSStringFromClass([self class]));
} /**
替换的函数
*/
- (void)doNothing {
NSLog(@"doNothing");
} - (void)changeReachability { Class ecoTools = NSClassFromString(@"EcoInitTools"); // 获取reachabilityChanged方法地址
Method doSomeThingMethod = class_getInstanceMethod(ecoTools, @selector(reachabilityChanged:));
Method doNothingMethod = class_getInstanceMethod([self class], @selector(doNothing)); // 交换方法地址,相当于交换实现方式
method_exchangeImplementations(doSomeThingMethod, doNothingMethod);
} @end

  

我写的RunTime函数之一,为类的某个属性赋值以及方法交换的更多相关文章

  1. c++学习笔记之基础---类内声明函数后在类外定义的一种方法

    在C++的“类”中经常遇到这样的函数, 返回值类型名 类名::函数成员名(参数表){ 函数体.} 双冒号的作用 ::域名解析符!返回值类型名 类名::函数成员名(参数表) { 函数体. } 这个是在类 ...

  2. ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries...

    2015年6月17日 ECMAScript 6发布正式版本 前面介绍基本语法,  后面为class用法及属性方法.set.symbol.rest等语法. 一.基本语法:  1.         定义变 ...

  3. 福利->KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型

    我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型 ...

  4. runtime使用小例子 - 给对象O-C属性赋值

    这些日子在家里学习runtime,看runtime的一些方法和前辈们的博客,我也尝试着写几个runtime有效的运用 一.给对象属性赋值,例如一个WebEntity类 她有三个属性:NSString. ...

  5. Runtime 应用(一)拦截系统自带的方法交换实现

    动态的交换方法能够给项目中大量已经使用的方法 进行拦截增加操作 实践:利用运行时交换系统的ImageNamed:方法 应用背景 当系统需要适配ios7和ios8时可能会有显示不同图片的需求,但在老项目 ...

  6. 通过字典给类的实体属性赋值生成url字符串

    private static Dictionary<string, string> SortedToDictionary(SortedDictionary<string, strin ...

  7. python 基础 5.4 类的私有属性和私有方法

    一. 类的私有变量和私有方法 1>   在python 中可以通过在属性变量名前,加上双下划线定义属性为私有属性   2>特殊变量命名 a. _xx 以单下划线开头的表示的是protect ...

  8. Python 类的私有属性与私有方法

    1.隐藏的使用场景 在Python类中,有些属性和方法只希望在对象的内部被使用,而不希望在外部被访问到, 2.定义方式, 在属性名或方法名前增加两个下划线,定义的就是私有属性或方法 #其实这仅仅这是一 ...

  9. 【python 3.6】类:访问属性及调用方法

    >>> class price(): //定义1个类,用于计算价格 def __init__(self,name,danjia): //初始化方法,定义商品名称和单价 self.na ...

随机推荐

  1. ASP.NET Core 启动流程图

    简洁描述: 一   WebHostBuilder.Build() =>1注入公共的实例 2创建WebHost实例 3注入自定义实例 4创建IServer 5添加中间件(_components集合 ...

  2. mybatis运行原理

    mybatis运行原理 运行过程中涉及到的类或者接口 Resources(c) :用于加载mybatis核心配置文件 XMLConfigBuilder(c) :用于解析xml文件(核心配置文件) Co ...

  3. shell编程:for循环

    有几个参数执行几次 do done取代了{} 这种用于 文件的个数,用户的个数等. (())里才可以进行加减乘除.

  4. Hibernate基础增删改查语法

    1.创建好Hibernate项目,创建好实体类和测试类,如果不会创建Hibernate项目的同学,点此处:http://www.cnblogs.com/zhaojinyan/p/9336174.htm ...

  5. 使用Spark下的corr计算皮尔森相似度Pearson时,报错Can only zip RDDs with same number of elements in each partition....

    package com.huawei.bigdata.spark.examples import org.apache.spark.mllib.stat.Statistics import org.a ...

  6. Codeforces Round #402 D String Game(二分)

    [题目类型]二分答案 &题解: 只要你想到二分答案就不是难题了,但我当时确实是想不到. [时间复杂度]\(O(nlogn)\) &代码: #include <cstdio> ...

  7. Mongodb $in $or 性能比较

      MongoDB docs have the answer: "When using $or with <expressions> that are equality chec ...

  8. websocket发送接收协议

    一.websocket接收数据 1)固定字节(1000 0001或1000 0010);   ---区分是否是数据包的一个固定字节(占1个字节) 个字节是数据的长度; 3)mark 掩码为包长之后的 ...

  9. 【2017-04-17】类库、通用变量、is和as、委托

    类库dll文件,里边有很多被编译后的C#代码,不可阅读,不可修改,只能调用 1.类库创建 新建项目为类库,类库文件编写完成后,选择生成—生成解决方案,在debug文件夹下找到dll文件 2.类库引用 ...

  10. locust 的使用

    Contents Locust这一款开源性能测试工具.然而,当前在网络上针对Locust的教程极少,不管是中文还是英文,基本都是介绍安装方法和简单的测试案例演示,但对于较复杂测试场景的案例演示却基本没 ...