关于 Runtime 的使用,各位大神进来说说

2015-08-14 11:14:55 +08:00
 lynulzy

Runtime 这个话题从来都是中高级iOS开发者面试的必问题目,有互联网基因的公司都会比较重视面试者相关知识的掌握程度,这也是本猿面试多家互联网公司得到的经验(准确的说是教训),然而事实是在日常开发工作中并没有用到太多,在了解到一些Runtime的牛逼之处之后,觉得应该有很广的应用。

从这篇文章开始说起

介绍了Runtime的一些基础知识,基本概念。

其中提到的一个场景
消息转发,在另一篇文章中也有详细的阐述,当obj_msgSend找不到类中对方法的实现的时候有三个入口可以手动的提供相应的实现方法,在这里有详细阐述。

针对Runtime的实际使用场景,我也找到另外一篇使用Runtime给Model类赋值

So 问题来了

在网上也找了一些资料,然而指明某种应用场景的很少,而自己对这方面的理解也并不深刻,希望有过使用经验的朋友能够分享一些使用Runtime的场景,或者某些关于Runtime的(黑魔法)。

4310 次点击
所在节点    iDev
13 条回复
kepenj
2015-08-14 11:32:59 +08:00
方法调配、关联对象、多继承、私有方法或参数的获取和调用,等等。 OC设计的核心是运行时,同时runtime是开源的,相关函数的介绍和函数的实现苹果已经提供给你了,玩法都是人造出来的。
lynulzy
2015-08-14 11:58:28 +08:00
@kepenj 对的,问题的关键在于没玩过...您说的这几个倒是好理解
doluvor
2015-08-14 12:11:00 +08:00
用method swizzle扩展一些SDK和获取SDK内部参数
nathanw
2015-08-14 12:49:48 +08:00
我觉得 runtime 是为了考察你对 oc 的理解,重点不在玩法。想要知道更多广泛的应用,就多看看别人的开源库,博客,还有增加自己的实际开发经验。因为有些用法是为了解决某些特定需求,并不是一句两句可以说得清的。在这里先给你推荐一个大神的库 https://github.com/bang590/JSPatch
cxq
2015-08-14 16:08:14 +08:00
之前维护旧项目有用到,而且很好用。前一段时间 客户有个要求,要让一个已经上线的项目下个版本,所有按钮支持主题切换,也就是说每个按钮要支持多一张图。
每个按钮要知道当前显示的图片的名字,切换主题时按钮要根据当前图片切换到另一张图。

要做到这个要为UIButton增加一个imageName的属性,并且重写写setBackgroundImage forState记得当前是什么图片。 用继承一个一个替Button换类太花时间,客户等不了。

后来用associated object 给UIButton增加了imageName属性,method swizzle 给setBackgroundImage forState对imageName的赋值, 本地加了个json文件记录图片的配对。最后省了好多时间。

不过现在也不知道这么做有负面影响?求大神指点。
Cee
2015-08-14 16:20:51 +08:00
CFHipsterRef
jesse_luo
2015-08-14 18:19:52 +08:00
实现 AOP 算一个么……
pengjay
2015-08-14 20:51:11 +08:00
关联对象用的比较多
wezzard
2015-08-14 21:03:10 +08:00
其实这些都是初级技巧,考验你对 C 语言和计算机工作原理的认知,你这两个认知到位了,runtime 很容易。其实对于很多设计、很多奇技淫巧,你站在它们的出发点去检视它们被创造出来之前开发人员所面对的困境,就可以很容易推导出它们为何如此的原因。切忌因为要学习奇技淫巧而去学习奇技淫巧。
j16ZgMV9cs6ZB23n
2015-08-14 23:03:22 +08:00
@Cee +1
lynulzy
2015-08-14 23:06:36 +08:00
@nathanw 大致看了下,大量使用消息转发,值得学习!

@cxq 关联对象的使用、method swizzle,感谢!
@Cee 这本书怎么样?
@jesse_luo 666当然算
lynulzy
2015-08-14 23:09:27 +08:00
@wezzard 嗯,感谢,没有要去为了...学习... 准确的说不是为了什么,至少觉得这么牛逼的东西之前一直没用过,觉得挺low,了解一下如果对以后的工作有裨益,用一用,何乐而不为呢?
hohoho
2015-08-17 19:49:36 +08:00
effective objective-c 不错,个人感觉对了解 runtime 挺有帮助,楼主可以参考下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/213151

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX