我写的RunTime函数之一,为类的某个属性赋值以及方法交换
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函数之一,为类的某个属性赋值以及方法交换的更多相关文章
- c++学习笔记之基础---类内声明函数后在类外定义的一种方法
在C++的“类”中经常遇到这样的函数, 返回值类型名 类名::函数成员名(参数表){ 函数体.} 双冒号的作用 ::域名解析符!返回值类型名 类名::函数成员名(参数表) { 函数体. } 这个是在类 ...
- ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries...
2015年6月17日 ECMAScript 6发布正式版本 前面介绍基本语法, 后面为class用法及属性方法.set.symbol.rest等语法. 一.基本语法: 1. 定义变 ...
- 福利->KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型
我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型 ...
- runtime使用小例子 - 给对象O-C属性赋值
这些日子在家里学习runtime,看runtime的一些方法和前辈们的博客,我也尝试着写几个runtime有效的运用 一.给对象属性赋值,例如一个WebEntity类 她有三个属性:NSString. ...
- Runtime 应用(一)拦截系统自带的方法交换实现
动态的交换方法能够给项目中大量已经使用的方法 进行拦截增加操作 实践:利用运行时交换系统的ImageNamed:方法 应用背景 当系统需要适配ios7和ios8时可能会有显示不同图片的需求,但在老项目 ...
- 通过字典给类的实体属性赋值生成url字符串
private static Dictionary<string, string> SortedToDictionary(SortedDictionary<string, strin ...
- python 基础 5.4 类的私有属性和私有方法
一. 类的私有变量和私有方法 1> 在python 中可以通过在属性变量名前,加上双下划线定义属性为私有属性 2>特殊变量命名 a. _xx 以单下划线开头的表示的是protect ...
- Python 类的私有属性与私有方法
1.隐藏的使用场景 在Python类中,有些属性和方法只希望在对象的内部被使用,而不希望在外部被访问到, 2.定义方式, 在属性名或方法名前增加两个下划线,定义的就是私有属性或方法 #其实这仅仅这是一 ...
- 【python 3.6】类:访问属性及调用方法
>>> class price(): //定义1个类,用于计算价格 def __init__(self,name,danjia): //初始化方法,定义商品名称和单价 self.na ...
随机推荐
- c++基础:之封装
原创: 零灵柒 C/C++的编程教室 2月4日 什么是类 C++是什么?C++设计之初就是class with c,所以简单点说,C++就是带类的C,那么什么是类? 类,简单点说就是类型,在 ...
- 将Web项目War包部署到Tomcat服务器基本步骤
参考来源: http://www.cnblogs.com/pannysp/archive/2012/03/07/2383364.html 1. 常识: 1.1 War包 War包一般是在进行Web ...
- Js闭包学习笔记
好多内容摘抄了大神的博客内容,只为分享记录.如有冒犯,请见谅 参考文章 http://www.cnblogs.com/libin-1/p/5962269.html http://www.cnblogs ...
- python 爬起点目录
#目标:书名,简介,作者,字数 #首先确定源代码的列表 import urllib.request import re from bs4 import BeautifulSoup import ran ...
- Apache+Tomcat+Memcached实现会话保持
会话保持的三种方式 Session sticky会话绑定:通过在前端调度器的配置中实现统一session发送至同一后发端服务器 Session cluster会话集群:通过配置Tomcat保持所有To ...
- GO slim
1. GO slim简介 GO slims are cut-down versions of the GO ontologies containing a subset of the terms in ...
- Spring boot jackson
Spring boot 所引用的包里面包含 jackson-databind-2.8.3.jar jackson-annotations-2.8.3.jar jackson-core-2.8.3.ja ...
- xml 的 <![CDATA["URL"]]>
<![CDATA["URL"]]>:用于 xml 处理特殊字符,比如:& <PolicyURL><![CDATA[ http://ectp.t ...
- 【Alpha版本】冲刺阶段——Day4
[Alpha版本]冲刺阶段--Day4 阅读目录 今日进展 问题困难 明日任务 今日贡献量 TODOlist [今日进展] 完成注册类代码 public class Register { privat ...
- Python+OpenCV图像处理(二)——打印图片属性、设置图片存储路径、电脑摄像头的调取和显示
一. 打印图片属性.设置图片存储路径 代码如下: #打印图片的属性.保存图片位置 import cv2 as cv import numpy as np #numpy是一个开源的Python科学计算库 ...