iOS 的 runtime

Runtime

运行时的使用:

1. KVO , KVC

2. 运行过程中交换两个方法的实现,改系统的方法.

  例如:  当一个做了几年的项目要从iOS6适配到iOS7时,要把之前的图片全部换掉,可通过扩展UIImage 实现它的分类.补充一个类方法imageWithName: name.然后将系统的imageName:方法与imageWithName:name 的方法在运行时换掉,而不用修改其他代码.

#import "UIImage+Extension.h"
#import <objc/runtime.h>

@implement UIImage(Extension)

+(void) load
{
    Method otherMethod = class_getClassMethod([UIImage class],@selector(imageWithName:));
    Method originMethod = class_getClassMethod([UIImage class],@selector(imageNamed:));
    //交换两个方法的实现
    method_exchangeImplementations(otherMethod, originMethod);
}

+ (UIImage *) imageWithName:(NSString *) name
{
    BOOL ios7 = [[UIDevice currentDevice].systemVersion floatValue] >= 7.0;
    UIImage * image = nil;
    if (ios7)
    {
        NSString * newName = [name stringByAppendingString:@"_os7"];
        image = [UIImage imageWithName:newName];
        }
    if (image ==nil)
    {
        image = [UIImage imageWithName: name];
    }
    return image;
}
@end
时间: 2024-11-05 18:56:25

iOS 的 runtime的相关文章

关于iOS的runtime

runtime是一个很有意思的东西,如果你学iOS开发很经常就会用到或被问到runtime.那么runtime是什么呢,如何去了解它. runtime:中文名 运行时,系统在编译时留下的一些 类型,操作在运行的时候动态去分析,处理,这也说明了object-c是一个动态语言.(swift与之不同,swift虽然可以通过调用oc的runtime,但是swift本身是静态语言.但是却通过能够和oc交互变成了具有动态特性的静态语言,这是闲话,不扯了). 要了解runtime,知道runtime是什么.我

iOS的runtime运行时机制

本文转自http://www.cnblogs.com/guoxiao/p/3583432.html 最近一直在研究runtime运行时机制的问题,我想可能也有很多人不太清楚这个问题吧?在这里跟大家沟通分享下我对与runtime机制的理解. 要理解runtime,首先我们要了解类和对象的内部结构,下面将首先介绍下OC中类与对象的结构层次. 一.首先,从 runtime.h头文件中找到对 class 与 object 的定义 /// An opaque type that represents an

iOS运用runtime全局修改UILabel的默认字体

iOS运用runtime全局修改UILabel的默认字体 一.需求背景介绍 在项目比较成熟的基础上,遇到了这样一个需求,应用中需要引入新的字体,需要更换所有Label的默认字体,但是同时,对于一些特殊设置了字体的label又不需要更换.乍看起来,这个问题确实十分棘手,首先项目比较大,一个一个设置所有使用到的label的font工作量是巨大的,并且在许多动态展示的界面中,可能会漏掉一些label,产生bug.其次,项目中的label来源并不唯一,有用代码创建的,有xib和storyBoard中的,

iOS:runtime最全的知识总结

runtime 完整总结 好东西,应该拿出来与大家分享... 南峰子博客地址:http://southpeak.github.io/blog/categories/ios/ 原文链接:http://www.jianshu.com/p/6b905584f536 类和对象 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等.这种特性意味着

iOS开发-Runtime详解(简书)

简介 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的.比如: [receiver message]; // 底层运行时会被编译器转化为: objc_msgSend(receiver, selector) // 如果其还有参数比如: [receiver message:(id)arg...]; // 底层运行时会被编译器转化为: objc_msgSend(receiver, selector, arg1,

iOS之RunTime浅谈

首先说一下什么是runtime:RunTime简称运行时.就是系统在运行的时候的一些机制,其中最主要的是消息机制.对于C语言,函数的调用 在编译的时候会决定调用哪个函数( C语言的函数调用请看这里 ).编译完成之后直接顺序执行,无任何二义性.OC的函数调用成为消息发送.属于动态调用过程.在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错.而C语言在编译阶段就会报错).只有在真正运行的时候才会根据函数的名称找 到对应的函

iOS利用Runtime自定义控制器POP手势动画

前言 苹果在iOS 7以后给导航控制器增加了一个Pop的手势,只要手指在屏幕边缘滑动,当前的控制器的视图就会跟随你的手指移动,当用户松手后,系统会判断手指拖动出来的大小来决定是否要执行控制器的Pop操作. nav_pop_origin.gif 这个操作的想法非常好,但是系统给我们规定的范围必须是屏幕左侧边缘才可以触发,这样实际使用过程中对于有些产品会产生不便,于是有些app就采取整个屏幕都响应这个手势并且pop动画还是用系统原生的,这样操作起来确实方便好多. nav_pop_custom.gif

iOS开发RunTime之函数调用

文章来自小笨狼的iOS博客,一直觉得csdn的博客UI不太好看,看博客不太爽,所以自己搭建了一个博客.欢迎各位去链接中看我的博客.也欢迎大家加QQ群讨论iOS技术问题 经过两个多月的面试,工作终于尘埃落定了.这两个多月的面试过程中,我发现很多底层基础的东西大公司非常看重.比如:RunLoop,RunTime,Block等.这篇文章主要是介绍RunTime中函数调用的机制,知识点有一定深度,也是面试过程中能力的体现. 1.Objective-C中的函数调用 对于C语言,函数调用是由编译器直接转化完

iOS:runtime消息机制

最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题.当然还有一些其他问题也几乎必问,例 如:RunLoop,Block,内存管理等.其他的问题如果有机会我会在其他文章中介绍.本篇文章主要介绍RunTime. RunTime简称运行时.就是系统在运行的时候的一些机制,其中最主要的是消息机制.对于C语言,函数的调用在编译的时候会决定调用哪个函数( C语言的函数调用请看这里 ).编译完成之后直接顺序执行,无任何二义性.OC的函数调用成为消息发送

IOS开发——Runtime运行时

Runtime运行时,是objective-c底层C库,下面是详细的常用runtime函数使用解释,属于IOS开发高级进阶内容,有兴趣的朋友可以了解学习.