ios runtime之交换方法method_exchangeImplementations的使用

最常见的情况字体的适配

UIFont新建分类重写Load方法

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 19.0px Menlo; color: #78492a; background-color: #ffffff }
span.s1 { color: #272ad8 }

#define SCALE(s)  ((s) / 375.0 * SCREEN_WIDTH)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 19.0px Menlo; color: #000000; background-color: #ffffff }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 19.0px Menlo; color: #008400; background-color: #ffffff }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 19.0px Menlo; color: #3e1e81; background-color: #ffffff }
span.s1 { color: #ba2da2 }
span.s2 { color: #703daa }
span.s3 { color: #3e1e81 }
span.s4 { color: #000000 }
span.s5 { color: #31595d }
span.s6 { color: #272ad8 }

+ (void)load {

// 自己的方法

Method newMethod =class_getClassMethod([self class], @selector(adjustFont:));

// 系统的方法

Method method = class_getClassMethod([self class], @selector(systemFontOfSize:));

// 黑魔法交换方法

method_exchangeImplementations(newMethod, method);

}

+(UIFont *)adjustFont:(CGFloat)fontSize{

UIFont *newFont=nil;

newFont = [UIFont adjustFont:SCALE(fontSize)];

return newFont;

}

当然这个方法网上一搜一大推,但是重要的是思路,用自己的方法和系统的方法交换其实变成了adjustFont:实现的是systemFontOfSize:所指向的方法。

原文地址:https://www.cnblogs.com/jeyios/p/9210512.html

时间: 2024-10-12 05:57:16

ios runtime之交换方法method_exchangeImplementations的使用的相关文章

ios开发runtime学习二:runtime交换方法

#import "ViewController.h" /* Runtime(交换方法):主要想修改系统的方法实现 需求: 比如说有一个项目,已经开发了2年,忽然项目负责人添加一个功能,每次UIImage加载图片,告诉我是否加载成功 当系统提供的控件不能满足我们的需求的时候,我们可以 1:通过继承系统控件,重写系统的方法,来扩充子类的行为(super的调用三种情况) 2:当需要为系统类扩充别的属性或是方法的时候,与哪个类有关系,就为哪个类创建分类.3:利用runtime修改系统的类,增加

ios runtime 动态向类添加方法

1.定义C函数: void dynamicMethodIMP(id self, SEL _cmd) { NSLog(@"蜗牛也疯狂"); } 2.重写函数+(BOOL)resolveInstanceMethod:(SEL)sel +(BOOL)resolveInstanceMethod:(SEL)sel { class_addMethod([self class], sel, (IMP)dynamicMethodIMP, "[email protected]:");

iOS Runtime原理及使用

runtime简介 因为Objc是一门动态语言,所以它总是想办法把一些决定工作从编译连接推迟到运行时.也就是说只有编译器是不够的,还需要一个运行时系统 (runtime system) 来执行编译后的代码.这就是 Objective-C Runtime 系统存在的意义,它是整个Objc运行框架的一块基石. RunTime简称运行时.OC就是运行时机制,其中最主要的是消息机制.对于C语言,函数的调用在编译的时候会决定调用哪个函数.对于OC的函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个

iOS runtime探究(四): 从runtiem开始实践Category添加属性与黑魔法method swizzling

你要知道的runtime都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639335 本文主要讲解runtime相关知识,从原理到实践,由于包含内容过多分为以下五篇文章详细讲解,可自行选择需要了解的方向: 从runtime开始: 理解面向对象的类到面向过程的结构体 从runtime开始: 深入理解OC消息转发机制 从runtime开始: 理解OC的属性property 从runtime开始: 实践Category添加属

iOS RunTime运行时(1):类与对象

Objective-C语言是一门动态语言,他将很多静态语言在编译和链接期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码更具有灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一下方法的实现等. 这种特性意味着OC不仅需要一个编译器,还需要一个运行时系统来执行编译的代码.对于OC来说,这个运行时系统就像一个操作系统一样:他让所有的工作可以正常的运行,这个运行时系统就是Objc RunTime.objc RunTime 其实是一个RunTime库,他基本上是用C语言和汇编写的.

ios runtime swizzle

ios runtime swizzle @implementation NSObject(Extension) + (void)swizzleClassMethod:(Class)class originSelector:(SEL)originSelector otherSelector:(SEL)otherSelector { Method otherMehtod = class_getClassMethod(class, otherSelector); Method originMehtod

关于 iOS RunTime 使用的一些场景

1.RunTime 简介: RunTime 在 OC 中的工作:OC 语言的设计模式决定了尽可能的把程序从编译和链接时推迟到运行时.只要有可能,OC 总是使用动态的方式来解决问题.这意味着 OC 语言不仅需要一个编译器,同时也需要一个运行时系统来执行编译好的代码.这儿的运行时系统扮演的角色类似于 OC 语言的操作系统,OC 基于该系统来工作. 2.RunTime 常用场景: 1.动给属性赋值: 例如我先创建一个 Student 对象,里面定义两个属性:name.age 下面看截图 这个时候运行打

Objective-C Runtime的基本使用(iOS Runtime的初体验)

一.Runtime前言 最近研究Runtime,基础不够好,研究好久了,才了解一些些,知道个大概,这里做一个笔记.OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类的对象相应的方法.利用runtime机制让我们可以在程序运行时动态修改类,对象中的所有属性,方法,就算是私有方法以及私有属性都可以动态的修改.所以我所理解的就是 动态创建类,修改类,访问私有方法等一些基本特性,应该说理解runtime的基本用法吧! 二.Runtime简介 Runtime简称运行时,就是系统在运行的时候

iOS runtime原理

对于runtime机制,在网上找到的资料大概就是怎么去用这些东西,以及查看runtime.h头文件中的实现,当然这确实是一种很好的学习方法,但是,其实我们还是不会知道runtime底层编译成C++语言之后做了什么? 查到一个大牛给资料,顿时对runtime有了一定认识! 我们随便写一个小程序,代码如下: person类头文件如下, #import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomi