OSC 第 110 期高手问答 —— OC & Swift 运行时特性

linuxhitlover 发布于 2016/01/19 10:25
阅读 6K+
收藏 5

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

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 提问,请直接回帖提问。

加载中
0
ishengsheng
ishengsheng
@yeskert  : 听云使用的运维平台都有哪些?还是自己写的?
0
mystar
mystar
@yeskert :现在oc针对swift还有什么优势么?
0
yeskert
yeskert

@mystar  swift很优雅,是未来,oc暂时还有群体优势。

0
yeskert
yeskert
@用升 这个问题留给另一期我同事回答
0
yeskert
yeskert

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

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


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

引用来自“tenght”的评论

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

引用来自“xiaolei123”的评论

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

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

googlespot
googlespot
关键就是ui组件的桥接,如果有开源组织把这个干了,一切就ok了,其实IBM可以推动这个事情的。
0
duchipore
duchipore
@yeskert : 好像我听说swift运行速度特别慢 和 c/c++ 的运行速度不是一个档次的?swift是采用arc 而nim也是采用引用计数的 为啥nim能够做到速度接近于c呢?为啥swift的优化做得这么烂呢?
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部