码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2017-11-05 13:12:05      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:方法   c语言   中文   nil   修改   创建   之一   界面   很多   

什么是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实现系统内部方法的修改. 新手分享,大神不喜勿喷.

  

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

标签:方法   c语言   中文   nil   修改   创建   之一   界面   很多   

原文地址:http://www.cnblogs.com/baxiu/p/7787076.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!