iOS~runtime理解 - (开发面试必备)

什么是Runtime?

Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的。

多数情况我们只需要编写 OC 代码即可,Runtime 系统自动在幕后搞定一切,所以很多朋友对runtime不是很重视,等面试的时候经常被面试官卡住.我也是新手,吃了这个亏,所以对runtime进行了学习,以通俗易懂的方式分享给大家

Runtime 的作用

可以通过Runtime修改系统方法,比方说我们平时在项目中用到WKWebView(UIWebView)去加载一些url,如果在URL中含有中文,OC语言是不能够识别出该URL的.所以我们输出的URL为null,此时界面就加载不出来,那么我们如何去避免这种问题?

第一种方式,使用Category(类的扩展)首先我们创建一个继承与NSURL的扩展

然后我们在这个扩展的.h中写一个类方法

然后在.m中去实现

最后回到自己的控制器去导入这个扩展到头文件,将本来系统的URLWithString 改成自己扩展的类方法,这样我们就能轻易的定位到为什么自己的URL没有加载出来了

那么重点来了,我们如何使用Runtime去实现修改系统提供给我们的方法呢?(不用自定义方法)

首先大家要知道,执行URLWithString方法的时候,系统内部会首先调用+(void)load方法,那我们就在这个方法里边使用Runtime进行修改,先导入头文件#import <objc/runtime.h>然后在load方法中将系统的URLWithString方法和我们之前自定义的BX_UrlWithString方法进行交换.也就是说,当我们调用URLWithString方法加载url的时候,让系统内部自动调用我们自定义的BX_UrlWithString方法中来.下图都有注释,此时我们在我们控制器中用URLWithString去加载URL就会实现了在他的内部多一个我们自己加的功能(判断URL是否为nil)

到这里我们就实现了使用Runtime实现系统内部方法的修改. 新手分享,大神不喜勿喷.

  

时间: 2024-10-10 21:16:13

iOS~runtime理解 - (开发面试必备)的相关文章

iOS runtime的简单理解

最近闲了下来,有时间了就研究一下runtime的运行机制,之前做开发的时候一直也没有特别关注这个东西,只是知道有,但是很少去刻意的使用,研究的不是很深,简单说一下吧,有错误的地方欢迎大家随时指正. Objective-C Runtime 是什么? Objective-C 的 Runtime 是一个运行时库(Runtime Library),它是一个主要使用 C 和汇编写的库,为 C 添加了面相对象的能力并创造了 Objective-C.这就是说它在类信息(Class information) 中

iOS开发面试高频题

iOS开发面试高频题,面试不再懵逼 目录 前端技术2016年5月4日 对于要面试iOS开发的同学,可能已经看了很多的面试题.但是网上很多的面试题有些很全,但是没有重点,有些又太少.今天小编给大家整理了一些比较重要和经常问的面试题,总共20个,半小时之内就可以看完. 1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;

iOS runtime探究(二): 从runtime開始深入理解OC消息转发机制

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

Java常用英语汇总(面试必备)

Java常用英语汇总(面试必备) abstract (关键字)             抽象 ['.bstr.kt] access                            vt.访问,存取 ['.kses]‘(n.入口,使用权) algorithm                     n.算法 ['.lg.riem] annotation                     [java]代码注释 [.n.u'tei..n] anonymous                

ios runtime的相关知识

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

2015腾讯暑期实习生 Web前端开发 面试经历

[2015腾讯暑期实习生 Web前端开发 面试经历] 好吧,首先声明,我被刷了,应该是跪在二面 微信查到的面试状态一直呈现复试中 .. 整整四天了.. 看来是没希望了 不过也是一次经历,记录一下还是可以的 .. 零.TST内推 TST还是有必要提一下,早早就随大家把简历交上去内推了 很多人都有评级了,各种评级都有 但我 从头到尾都查不到评级..是漏了..还是简历太渣看不上... 还是怎么回事..衰.. 一.笔试 笔试是在3月29号在华工考的,腾讯的笔试一直都那么回事,技术岗的都同样一份试题. 试

iOS runtime实战应用:关联对象

在开始之前建议先阅读iOS runtime的基础理解篇:iOS内功篇:runtime 有筒子在面试的时候,遇到这样一个问题:"如何給NSArray添加一个属性(不能使用继承)",筒子立马蒙逼了,不能用继承,难道用分类?但是分类貌似只能添加方法不能添加属性啊,筒子百思不得其解,直到后来接触到了runtime才恍然大悟. 什么是关联对象 关联对象是指某个OC对象通过一个唯一的key连接到一个类的实例上.举个例子:xiaoming是Person类的一个实例,他的dog(一个OC对象)通过一根

iOS runtime探究(五): 从runtime开始深入weak实现机理

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

Android开发新手必备16个知识

Android开发新手必备,这是我在麦子学院论坛里面看见的,觉得很不错,分享给大家: 1.Activity生命周期,横竖屏切换时候Activity状态变化. 生命周期: 完成的生命周期: 即从一个Activity出现到消失,对应的周期方法是:onCreate到onDestroy : 启动: onCreate()->onStart()->onResume三个方法: BACK键: 当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->