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. keras模型的保存与重新加载

    # 模型保存JSON文件 model_json = model.to_json() with open('model.json', 'w') as file: file.write(model_jso ...

  2. Sift中尺度空间、高斯金字塔、差分金字塔(DOG金字塔)、图像金字塔

    转自:https://blog.csdn.net/dcrmg/article/details/52561656 一. 图像金字塔 图像金字塔是一种以多分辨率来解释图像的结构,通过对原始图像进行多尺度像 ...

  3. Hibernate.基础篇《一》.Hibernate工具类.

    Hibernate.基础篇<一>.Hibernate工具类. 话述: Hibernate.基础篇第一篇,前面是代码.后面再加理论&实践. Hibernate使用的版本是:5.x,在 ...

  4. 解决React Native使用Fetch API请求网络报Network request failed

    问题来源: 1 . 在测试fetch数据请求时,Xcode9.0以上的无法请求https, 需要在Xcode中加载项目后修改Info.plist的相关配置,具体如下参考 问题及解决方法一模一样,不再重 ...

  5. Docker日志

    搜索Redis镜像 docker search redis ***************************** 拉取Redis镜像 docker pull redis ************ ...

  6. C# And Java 3DES加解密 ECB模式/PKCS7

    c#: /// <summary>     /// 完整     /// </summary>     public class TripleDESHelper1     { ...

  7. mysql优化(四)

    一.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where / group by / order by 涉及的列上建立索引. 1.索引失效情况. SQL什么条件会使用索引? 当字段上建有索引时, ...

  8. mysql使用navicat编写调用存储过程

    在Navicat里面,找到函数,右键,新建函数,选择过程,如果有参数就填写函数,如果没有就直接点击完成 在BEGIN......END中间编写要执行的sql语句,例如下面存储过程取名为pro_data ...

  9. iview的table中点击Icon弹Poptip,render函数的写法

    render: (h, params) => { return h('div', [ h('div', [ h('Poptip', { props: { confirm: true, trans ...

  10. PHP $_SERVER 及用户真实IP

    $_SERVER 是一个包含了诸如头信息(header).路径(path).以及脚本位置(script locations)等等信息的数组.这个数组中的项目由 Web 服务器创建.不能保证每个服务器都 ...