36
回答
OSC 第 110 期高手问答 —— OC & Swift 运行时特性
华为云实践训练营,热门技术免费实践!>>>   

OSCHINA 本期高手问答( 1月19日- 1月26日)我们请来了听云移动研发总监 @yeskert 来解答 Swift 和 Objective-C 的运行时特性 方面的问题。

杨凯,@yeskert ,听云移动研发总监,负责 tingyunApp SDK 的研发,从业近二十年,期待有一天从代码中顿悟人生。

OC 运行时特性

运行时特性(也即动态特性),是相对“编译时”而言的。它是指在程序运行期间能对程序自身进行修改的一种能力,本质上是一种“后期绑定”技术,就OC来说是用“消息”来实现的。这种特性令代码具有很强的灵活性,往往能实现一些不可思议的功能,也是 OC 强大的原因之一。

为了鼓励踊跃提问,@听云APM 会在问答结束后从提问者中抽取 10 名幸运会员赠予听云抱枕一个。

众 OSCer 可以用开源中国账号,直接登录听云 http://www.tingyun.com/ 使用开发者免费版产品哦~

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就 Swift 和 Objective-C 的运行时特性 方面的问题向 @yeskert 提问,请直接回帖提问。

举报
叶秀兰
发帖于2年前 36回/5K+阅
共有36个答案 最后回答: 2年前

今天讨论的话题是“Objective-C的运行时特性”,可能有误导,其实应该把“Objective-C”去掉。

两者的运行时机制是一样的。


--- 共有 3 条评论 ---
guozw能详细讲下swift在什么情况下会调用dinit函数吗?我在开发的时候发现资源设为nil后不是马上就调用dinint 2年前 回复
yeskert回复 @叶秀兰 : 谢谢 2年前 回复
叶秀兰好的 2年前 回复
@yeskert :能不能在运行时给一个类添加属性
--- 共有 3 条评论 ---
yeskert明白,你需要额外的存储。 也没问题,你可以用objc_setAssociatedObject实现。 2年前 回复
kang_code回复 @yeskert : 呵呵,这个我知道,本质上还是添加函数……我需要增加成员那种 2年前 回复
yeskert可以啊,最简单就是写getter和setter。 2年前 回复
@yeskert :运行时修改程序不会影响正常业务么?这个有很大风险吧?
--- 共有 3 条评论 ---
tenght回复 @yeskert : 那请问下,OC是如何降低风险,降低业务差错的呢? 2年前 回复
yeskert没错,风险是有的。 2年前 回复
yeskert与修改源码相比,同样是“改变程序”,运行时修改程序,只是方式不同。 2年前 回复

引用来自“tenght”的评论

@yeskert :运行时修改程序不会影响正常业务么?这个有很大风险吧?
这个问题的着眼点很高,我只能试着回答。
是的,语言或者说编译器会帮助开发者降低风险,例如强类型、参数匹配、指针的限制等,“运行时”没有这些便利,容易出错,有风险。
这要求在使用“运行时”时,自己做那方面的工作,做一些检查和判断,例如,self的类型是否是预期的,_cmd是否匹配,目标类是否有目标方法,是否错用了super,等。
“运行时”要么是迫不得已才用,要么是要完成高层面的任务,成本和代价难免。
--- 共有 1 条评论 ---
tenght好的,谢谢你的解答。我想应该也要考虑的具体业务上,还有应该区分业务种类,对于核心业务、交易量大的,尽量不去做运行时修改吧。 2年前 回复

引用来自“xiaolei123”的评论

@yeskert :swift现在已经开源,以后有没有可能使用swift在多个移动平台上开发APP呢?譬如安卓平台。

苹果公司开源swift,肯定有想法的。
但作为android的开发语言,可能性很小,不单纯是语言的事,动作太大了。
再说,还有Go等着呢

--- 共有 1 条评论 ---
googlespot关键就是ui组件的桥接,如果有开源组织把这个干了,一切就ok了,其实IBM可以推动这个事情的。 2年前 回复
顶部