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. jQuery-图片轮播-随意切换图片

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 关于hibernate一级缓冲和二级缓冲

    关于一级缓冲和二级缓冲的内容,在面试的时候被问起来了,回答的不是很满意,所以有专门找了些有关这方面的文章加以理解 出自:http://blog.csdn.net/zdp072/article/deta ...

  3. c# 集合中有数字、字符的Orderby排序

    string[] things= new string[] { "105", "101", "102", "103", ...

  4. Sitecore CMS中配置项目图标

    在Sitecore中,图标通常用于通过各种不同的模板类型快速区分项目.文章可能使用红色图标,而列表页面可能使用蓝色.项目上设置的图标可以在内容树中看到,也可以在选择项目时在内容编辑器的顶部看到. 从功 ...

  5. 排序(Sort)-----冒泡排序

    声明:文中动画转载自https://blog.csdn.net/qq_34374664/article/details/79545940    1.冒泡排序简介 冒泡排序(Bubble Sort),又 ...

  6. 大数据处理框架之Strom: Storm----helloword

    大数据处理框架之Strom: Storm----helloword Storm按照设计好的拓扑流程运转,所以写代码之前要先设计好拓扑图.这里写一个简单的拓扑: 第一步:创建一个拓扑类含有main方法的 ...

  7. 【swiper轮播插件】解决swiper轮播插件触控屏问题

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Linux基础命令---查找进程id

    pidof pidof可以查找指定名称的进程的pid,将结果送到标准输出.pidof有两种返回值:0,找到至少一个进程:1,没有找到进程.pidof实际上与killall5相同:程序根据调用它的名称进 ...

  9. react系列笔记1 用npx npm命令创建react app

    react系列笔记1 用npx npm命令创建react app create-react-app my-app是开始构建新的 React 单页应用程序的最佳方式.它已经为你设置好了开发环境,以便您可 ...

  10. python 关键字yield解析

    python 关键字yield解析 yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator.y ...