Runtime 这个话题从来都是中高级iOS开发者面试的必问题目,有互联网基因的公司都会比较重视面试者相关知识的掌握程度,这也是本猿面试多家互联网公司得到的经验(准确的说是教训),然而事实是在日常开发工作中并没有用到太多,在了解到一些Runtime的牛逼之处之后,觉得应该有很广的应用。
从这篇文章开始说起
介绍了Runtime的一些基础知识,基本概念。
其中提到的一个场景
消息转发,在另一篇文章中也有详细的阐述,当obj_msgSend找不到类中对方法的实现的时候有三个入口可以手动的提供相应的实现方法,在这里有详细阐述。
针对Runtime的实际使用场景,我也找到另外一篇使用Runtime给Model类赋值
在网上也找了一些资料,然而指明某种应用场景的很少,而自己对这方面的理解也并不深刻,希望有过使用经验的朋友能够分享一些使用Runtime的场景,或者某些关于Runtime的(黑魔法)。
1
kepenj 2015-08-14 11:32:59 +08:00 1
方法调配、关联对象、多继承、私有方法或参数的获取和调用,等等。 OC设计的核心是运行时,同时runtime是开源的,相关函数的介绍和函数的实现苹果已经提供给你了,玩法都是人造出来的。
|
3
doluvor 2015-08-14 12:11:00 +08:00 via Android
用method swizzle扩展一些SDK和获取SDK内部参数
|
4
nathanw 2015-08-14 12:49:48 +08:00
我觉得 runtime 是为了考察你对 oc 的理解,重点不在玩法。想要知道更多广泛的应用,就多看看别人的开源库,博客,还有增加自己的实际开发经验。因为有些用法是为了解决某些特定需求,并不是一句两句可以说得清的。在这里先给你推荐一个大神的库 https://github.com/bang590/JSPatch
|
5
cxq 2015-08-14 16:08:14 +08:00
之前维护旧项目有用到,而且很好用。前一段时间 客户有个要求,要让一个已经上线的项目下个版本,所有按钮支持主题切换,也就是说每个按钮要支持多一张图。
每个按钮要知道当前显示的图片的名字,切换主题时按钮要根据当前图片切换到另一张图。 要做到这个要为UIButton增加一个imageName的属性,并且重写写setBackgroundImage forState记得当前是什么图片。 用继承一个一个替Button换类太花时间,客户等不了。 后来用associated object 给UIButton增加了imageName属性,method swizzle 给setBackgroundImage forState对imageName的赋值, 本地加了个json文件记录图片的配对。最后省了好多时间。 不过现在也不知道这么做有负面影响?求大神指点。 |
6
Cee 2015-08-14 16:20:51 +08:00
CFHipsterRef
|
7
jesse_luo 2015-08-14 18:19:52 +08:00
实现 AOP 算一个么……
|
8
pengjay 2015-08-14 20:51:11 +08:00
关联对象用的比较多
|
9
wezzard 2015-08-14 21:03:10 +08:00
其实这些都是初级技巧,考验你对 C 语言和计算机工作原理的认知,你这两个认知到位了,runtime 很容易。其实对于很多设计、很多奇技淫巧,你站在它们的出发点去检视它们被创造出来之前开发人员所面对的困境,就可以很容易推导出它们为何如此的原因。切忌因为要学习奇技淫巧而去学习奇技淫巧。
|
10
j16ZgMV9cs6ZB23n 2015-08-14 23:03:22 +08:00
@Cee +1
|
11
lynulzy OP |
12
lynulzy OP @wezzard 嗯,感谢,没有要去为了...学习... 准确的说不是为了什么,至少觉得这么牛逼的东西之前一直没用过,觉得挺low,了解一下如果对以后的工作有裨益,用一用,何乐而不为呢?
|
13
hohoho 2015-08-17 19:49:36 +08:00 via iPhone
effective objective-c 不错,个人感觉对了解 runtime 挺有帮助,楼主可以参考下
|