关于Mac文档中的Runtime如何理解?

mebius 发布于 2013年09月06日
无人欣赏。

最近在研读Mac开发相关的官方文档,在 《Acquire Foundational Programming Skills》这部分中,从始至终都在提及Runtime。对于Mac环境下的Runtime概念感到困惑不解。在使用Objective-C开发Mac应用程序时,我们可以完全使用Objective-C来开发,也可以在程序中混搭C语言代码。那么通过LLVM编译后生成的可执行文件运行于一个系统的Runtime中么?

对Runtime的概念和机制感到不理解,个人理解程度只能将Runtime理解为一个解释器。使用某一种语言编译后的中间格式,通过Runtime来执行。(虽然我没写过JAVA,但JAVA是应该基于Runtime)

那么在Mac中Runtime扮演怎样一个角色?他的机制是什么?

不知道哪位大神能够帮忙答疑解惑,在此先谢过了。

共8条回复
tinyfool 回复于 2013年09月07日

Runtime其实不是一个多严格的意义,也就是一个运行环境的意思。比如,你可以理解为C语言只有40多个关键字,你看到的全部的库,或者说stdlib是一个Runtime,就是你的程序运行期间想配合的一些系统架构方面的东西,或者说环境方面的东西。所有操作系统都有Runtime。

但是Runtime和虚拟机关系不大,跟解释器也没有关系。你可以理解为,你的程序会调用一个系统函数,这个系统函数是Windows的,那就是说Windows的Runtime有这个函数;是Mac的就是说Mac的Runtime有这个函数。

Objective-C比较喜欢强调Runtime的原因是,很多在别的语言里面用语言/编译器层面去解决的问题,Objective-C/Cocoa用Runtime来解决。比如GC/ARC等等都可以说是Cocoa Runtime解决的。简单的说,就是说这些都是用库实现的。

tinyfool 回复于 2013年09月07日

被提醒了,ARC主要还是靠编译器,不是靠Runtime,有点类似于编译预处理

Simeon 回复于 2013年09月07日

我的粗浅理解, 算是补充tiny。 objective-c里的class 说到底就是c里的structure,继承,方法 ,变量都可以在class struct 中有相应的定义, 通过runtime,objects的行为模式就是个对象了。 举个简单例子: objective-c 中 [ obj dosomething] 这个调用 和其他面向对象语言的方法调用不一样 ,它通过send message的方式去调用函数, 这需要runtime在 背后搜索那个somegthing 方法的指针 并调用该函数。 如有不对 欢迎指正。

abigfrog 回复于 2013年09月08日

ARC就是一个语法糖 仅此而已

tinyfool 回复于 2013年09月08日

ARC倒不是语法糖,它的实现比语法塘要复杂多了

abigfrog 回复于 2013年09月08日

我说的语法糖 意指本来程序员做的事情 改由编译器去做了 比如retain/release等代码 虽然使用ARC我们可以不用再写 但编译后的代码retain/release一个都不会少

ibuick 回复于 2013年09月09日

上面说的不够浅显,

Runtime 不是一个特定的概念,,在不同的语境下,意义不同。

看起来楼主懂Java,那么例子就更好举出了。

Java 有虚拟机,虚拟机提供的堆栈分配,消息机制,垃圾回收都可以算作 Java 程序的 Runtime。

如果你写了一套 Servlet based web app,那么 Tomcat 提供的 JDBC,JNDI,Message Service,State Session,Cache 等都是 Runtime。

同理,对于 Objective-C 编写的 Mac App,Cocoa 框架提供的服务,比如 Runloop 来推送给 App 窗口 Events,进/线程 之间的消息,数据传递,(XPC,IPC,Block/Queue) 等,都可以看作是 Cocoa App 的 Runtime。

从某个方面来说,Runtime 其实是指,在程序运行时,提供给程序运行所需的各类服务。

kxdd2002 回复于 2013年09月09日

呵呵,就用"运行容器"来理解就ok了。

登录 或者 注册