0

我有一个我无法真正回答的问题,所以我想知道是否有人可以在这里有所启发。

基本上,我有兴趣在运行应用程序之前和运行应用程序时了解 iOS 中发生了什么……但从操作系统的角度来看。

我已经看过很多关于当用户在主屏幕上点击应用程序时会发生什么的帖子,但我很想知道在后台基本上发生了什么,然后应用程序控制并主运行 UIApplication 的单例。而且一旦应用程序运行,整个操作系统是否在应用程序的主运行循环中被阻塞或其他事情发生?

特别是,我想了解谁创建了 UIApplication 将运行的进程(所以我假设整个应用程序将在该进程中运行)。

还想知道操作系统在做什么,例如,我在应用程序中打开一个连接......因为我看到创建了一个新线程(查看崩溃报告,我看到一堆线程正在运行,而不仅仅是主要的),但我不知道在哪里以及由谁创建它们(UIApplication 本身?,它们在启动应用程序之前已经在哪里运行?)。

希望问题很清楚;我到处搜索以查找信息,但我得到的只是当你点击一个应用程序时,main() 运行并调用 UIApplication,它控制、处理委托和视图等等......但是发生了什么在操作系统中是一个谜。

是否有任何与 iOS 部分相关的资源?谢谢!

4

1 回答 1

0

iPhone 的操作系统与任何其他现代操作系统非常相似。有一个提供低级功能的内核,一个提供高级功能的 API(对应用程序或操作系统本身)等等。

操作系统本身有很多进程始终处于活动状态,想想设备能够接收通知、接听电话、管理连接以及它需要运行的任何东西的事实。

当你启动一个应用程序时,唯一改变的是一个进程被启动并且它的控制权被赋予了应用程序。

而且一旦应用程序运行,整个操作系统是否在应用程序的主运行循环中被阻塞或其他事情发生?

整个操作系统没有被阻塞,启动的进程只是与许多其他不断运行的进程一起调度。这是通过多任务处理来实现的。

特别是,我想了解谁创建了 UIApplication 将运行的进程(所以我假设整个应用程序将在该进程中运行)。

该进程由操作系统本身创建,它创建了一个新的进程结构来管理刚刚启动的应用程序并对其进行调度(具有高优先级,因为它将在前台运行)。

(UIApplication 本身?,它们在启动应用程序之前已经在哪里运行?)。

线程在某种意义上类似于进程,它们有自己的代码并且它们实际上做某事,但线程是轻量级的,因为许多线程可以由一个进程管理。这意味着您的应用程序(或 API 调用)可以创建一个线程,该线程将与您的应用程序的主线程一起运行并管理它们的操作,但所有这些线程将共享相同的 CPU 分配时间和相同的内存空间等等。实际上 Cocoa 从开发人员的角度隐藏了许多细节,因此您不必确切关心应用程序自动启动哪些线程,因为您不需要:它们用于在对象之间调度消息,管理异步事件等等。

但这只是冰山一角,在了解 iOS 的工作原理之前,您应该了解较低级别的基础架构是如何工作的,例如BSD Unix,它实际上是 Darwin 的祖先之一,它是 iOS 运行的内核。在了解了它的工作原理之后,您将了解它的基础设施是如何工作的(即 iOS + 它的 API)。

于 2012-09-19T23:36:25.063 回答