ios程序的启动过程

在学习ios程序的时候,一般都会通过xcode的向导生成项目,且程序也能跑起来,很明显是xcode为我们做了很的工作,而这些工作对于想学好ios开发的我们而言是必须要了解的。

1.学过c语言的同学应该知道,c程序的入口点是main函数,既然object-c是面向对象的才,是不是也是从遵从了c的入口点呢?在你新建的工程supporting files下看看是否有main.m这个文件,确实如我们猜想,它就是oc程序的入口点了!

2.在main.m文件中,有这样的代码:

 int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
autoreleasepool是自动释放池,这个先放着,等学到内存管理等时候自然会学到。
在看看UIApplicationMain的四个参数:第一和第二是是c的内容,第三第四个才是oc的参数。
在讲第三第四个参数之前,先讲两个oc的类UIApplication和UIApplicationDelegate:
UIApplication:应用程序实例,这是面向对象编程的一个概念,我们知道,面向对象编程喜欢把事物抽象成类,UIApplication就是这个oc程序的抽象,用于在运行期间对应用程序的管理:
(1)管理应用程序的主消息队列,接收和分发用户或系统的事件。
(2)管理UIview实例的视图链接(应用程序的所有视图)。
(3)管理应用程序级的事件(通过通知它的代理)。
你可以通过[UIApplication shareApplication]获取这个实例。
UIApplicationDelegate:应用程序的代理,也就是UIApplication 的代理,什么是代理呢?简单的说是你的领导和你的关系,领导有事情就让你做,领导是被代理,你就是代理。
所以这里也一样,当有应用程序级(应用程序的生命周期)的事情发生时,UIApplication 就会让UIApplicationDelegate去处理。
那UIApplicationDelegate能处理那些事情?打开..AppDelegate.m文件,你会看到这几个方法:
//应用程序加载完成时调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    return YES;
}
//应用程序失去焦点时调用(比如有电话进来或是锁屏等)
- (void)applicationWillResignActive:(UIApplication *)application {
}
//进入后天调用
- (void)applicationDidEnterBackground:(UIApplication *)application {
}
//进入前台调用
- (void)applicationWillEnterForeground:(UIApplication *)application {
}
//应用程序获得焦点时调用
- (void)applicationDidBecomeActive:(UIApplication *)application {
}
//应用程序退出时
- (void)applicationWillTerminate:(UIApplication *)application {
}
细心的话时发现上面的六个方法是成对的关系。

现在回到UIApplicationMain第三第四个参数:
第三个参数就是UIApplication或是它的子类名,如果是nil,则默认是UIApplication。
第四个可能你也猜到了,是UIApplicationDelegate,应用程序的代理。

那UIApplicationMain这个函数到底做了什么事情,就是创建UIApplication实例,和它的代理UIApplicationDelegate,并启动消息循环。
带现在为止,还没有涉及到程序的UI,然而ios程序几乎全都涉及界面:
在消息循环启动完成之后,就创建程序的主窗口uiwindow,并设置uiwindow的根控制器,根控制器加载视图,视图加载你在上面布置的视图,接下来就是显示了。程序的启动就完成了。

1. 启动路线图:UIApplicationMain->创建UIApplication实例。
2. UIApplication创建并设置它的代理UIApplicationDelegate。
3. UIApplicationDelegate创建窗口uiwindow。
4.uiwindow设置它的控制器controller。
5.controller初始化它的视图uiview。
6.uiview显示你布置的控件或视图。
7.显示。



基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值