swift - 编译时间和运行时间概念
问题描述
我试图在编写代码以单击 iPhone 屏幕时了解幕后时期。我做了一些列举以使问题清楚。
时间 1:我在 Xcode 上编写代码(编译时间)
时间 2:有一个语法错误或者我忘记了 override 关键字(编译器在幕后工作并说嘿你有一个错误,修复这个)
时间 3:我修复了错误,看起来没有错误。(编译时间)
时间 4:我按下 Command + B 并且没有错误(编译时间 - 快速编译器将我的前端代码转换为我的 CPU 和 RAM 的汇编代码
时间 5:命令 R(运行时间)
时间 6:我的应用程序运行良好。( 运行 )
而不是在编译时指向堆栈,在运行时指向堆(堆栈上的值类型-堆上的引用类型),
你能解释一下在我列举的这些时间段内发生了什么吗?例如在 Time 3 - 编译时。我的机器或程序知道字符串值或我的自定义方法(值类型)知道它们将被准确地放入内存中的位置吗?是的,它将在堆栈中分配,但是一旦我编写代码,快速编译器就会转换为机器代码并放入 RAM 堆栈端,或者我有一些遗漏点?
我的第二个问题与第一个问题有关,在运行时为堆栈分配的所有值类型内存?
我几乎阅读了所有资源,所以我有一些背景,但我无法想象当我划分这个时间段时到底发生了什么。谢谢
解决方案
只是恢复一点:时间 1 到时间 3 是编辑时间。那里发生的情况是编译器仅运行以检查语法、变量初始化、参数有效性……这只是“预编译”</p>
时间 4 是生成机器代码的编译时间,链接谁是所有需要的库和框架。
时间 5 是安装,启动(最终调试器连接到正在运行的进程)
时间 6 是应用程序正在运行并与用户交互
推荐阅读
- python - python单链表不能正常工作
- php - 在 mac os X 上使用 PHP 连接到 postgreSQL db
- swift - 错误域 = NSCocoaErrorDomain 代码 = 3840 “字符 0 周围的值无效。”
- regex - 如何使用 Match,以重新格式化电话号码为例。(在 dart 中捕获 RegEx 组。)
- ffmpeg - Convert x265 Video to x264 and copy all audio tracks and subtitles
- python - 熊猫 to_datetime 显示格式不匹配
- javascript - 使用服务器端处理加载数据表中的数据需要 45 到 60 秒
- arrays - 如何使用 MongoDB 查询将所有记录集推送到一个数组中
- python - IndexError: , 在这种情况下,如何在不定义方法的情况下检查列表中的最后一个元素是否为空?
- python - 媒体时长