我有一个我无法回答的问题,所以我想知道是否有人可以在这里说清楚。
基本上我有兴趣了解iOS之前和运行应用程序时的情况...但是从操作系统的角度来看。
我看过很多关于当用户点击主屏幕上的应用时会发生什么的帖子,但我很想知道幕后发生了什么,之前应用程序控制并主要运行单身人士对于UIApplication。而且,一旦该应用程序运行,整个操作系统是否在应用程序的主运行循环中被阻止或其他东西正在进行?
特别是,我想了解谁创建了UIApplication将运行的进程(因此整个应用程序将在该进程内运行,我假设)。
也想知道操作系统在做什么时,例如,我在应用程序中打开一个连接...因为我看到创建了一个新线程(查看崩溃报告,我看到一堆线程正在运行,不只是主要的那个),但我没有得到它们和谁创建它们(UIApplication本身?,它们在启动应用程序之前已经运行了吗?)。
希望问题清楚;我搜遍了所有信息,但我得到的只是当你点击一个应用程序时,main()运行并调用UIApplication,它接管控制,处理委托和视图等等......但是会怎样在操作系统中是一个谜。
是否有与iOS部分相关的资源?谢谢!
答案 0 :(得分:0)
iPhone的操作系统与任何其他现代操作系统非常相似。有一个提供低级功能的内核,一个提供高级功能的API(要么应用到OS本身的应用程序)等等。
操作系统本身总是存在很多进程,只需考虑设备能够接收通知,接收呼叫,管理连接以及运行所需的任何内容。
启动应用程序时,唯一改变的是启动进程并将其控制权交给应用程序。
而且,一旦该应用程序正在运行,整个操作系统是否在应用程序的主运行循环中被阻止或其他内容正在进行?
整个操作系统未被阻止,启动的进程只是scheduled以及许多其他持续运行的进程。这是通过multi-tasking实现的。
特别是,我想了解谁创建了UIApplication将运行的进程(因此整个应用程序将在该进程内运行,我假设)。
该过程由操作系统本身创建,它实现了一个新的流程结构,用于管理刚刚启动的应用程序并对其进行计划(具有高优先级,因为它将在前台运行)。
(UIApplication本身?,它们在启动应用程序之前已经运行了吗?)。
线程类似于进程,因为它们有自己的代码,实际上它们做了一些事情,但线程是轻量级的,因为许多线程只能由一个进程管理。这意味着您的应用程序(或API调用)可以创建一个线程,该线程将与您的应用程序的主线程一起运行并管理它们的操作,但所有这些线程将共享相同的CPU分配时间和相同的内存空间等等。实际上Cocoa从开发人员的角度隐藏了许多细节,因此您并不关心应用程序自动启动哪些线程,因为您不需要:它们用于在对象之间分派消息,以便管理异步事件等等。
但这只是冰山一角,在了解iOS的工作原理之前,你应该先了解下层基础设施是如何运作的,例如BSD Unix实际上是达尔文的祖先之一,这是其中的核心。 iOS正在运营。在了解它是如何工作之后,您将了解它的基础设施如何工作(这是iOS +其API)。