iOS程序启动原理

一、 项目中的常见文件

      ** XxxxTest文件夹用来做单元测试。

                           

      ** Products目录。

         * Mac程序下,生产的可执行文件app会存放到该目录下。

         * iOS程序产生的是ipa文件。这个目录对于iOS程序来说意义不大。

                           

        1. info.plist(全局配置文件,非常重要, 不能删除 )

               * xcode5中是"项目名称-Info.plist"表示项目的全局配置文件,非常重要。在旧版本xcode(xcode6.1),该文件名称就叫Info.plist

                           

                           

               ** 注意:自己创建的plist文件中不要包含Info关键字。

                           

                           

               * Info.plist中的一些配置项:

                   1> Bundle display name(xcode6.1中叫做"Bundle name"), 表示软件安装到手机上后,显示的名称。

                        ** 当修改了该名称后,为了保证有效, 点击Product -> Clean, 同时将软件从模拟器中卸载掉,然后再重新运行。

                           

                   2> Bundle identifier, app的唯一标识。

                           

                   3> Bundle version, 每次发布软件的版本号。每次向AppStore上传的同一个软件,新的版本号必须大于旧的,否则无法上传。

                           

                   4> Main storyboard file base name,对应的就是选中"项目" ->"General" -> "Deployment Info" ->"Main Interface" 中的设置。

                           

                   5> Supported interface orientations,标识设备所支持的方向。对应的选中"项目" ->"General" -> "Deployment Info" ->"Device Orientation"iPhone只支持三种方向,不支持上下旋转(iPad支持)。Portrait(竖屏)Landscape Left(横屏向左)Landscape Right(横屏向右)

                           

                   6> Info.plist就是一个xml文件,用记事本打开看一下。

                                   

                                   

        2. pch文件:(Prefix Header File)(头文件)

               * 遇到的问题:

                           1> 整个项目中很多地方都在使用某个类的头文件。

                           

                           2> 整个项目中很多地方都在使用同一个""

                           

                           3> 在项目中很多地方用到了NSLog()函数,想一下子全都清除掉。


                           

               * 解决上面的问题,可以通过使用PCH文件(Prefix Header File)

                           

               * pch文件就是一个头文件(类似于*.h文件)

                

               ** 注意: PCH文件的特点,项目中的所有其他代码文件无需显示导入该PCH文件,默认就都可以访问(其他文件无需手动#import pch文件就能使用)。

                   /**

                    参考代码:

                    // 假设在整个项目中有多个地方在使用Person,那么可以在每个使用到Person类的地方都#import "Person.h",或者把#import "Person.h"放到pch文件中。

                    

                    */

               

               * 主要作用:

                   1可以放一些公用的宏定义。

                   

                   2> 把公共的Model类的#import导入写到pch文件中。

                   

                   3> 自定义NSLog()。例如: #define SteveZLog(...) NSLog(__VA_ARGS__)

                           

                           

               ** 遇到的问题: 在项目中很多地方用到了NSLog()函数,想一下子全都清除掉。

               /** 参考代码:

                int age = 20;

                

                NSString *name = @"steve";

                

                NSLog(@"name: %@, age: %d",name, age);

                

                // 在项目中的很多地方都用到了NSLog()

                NSLog(@"------------------------");

                

                

                

                // pch文件中定义如下宏:

                //  ... 表示SteveZLog可以接受多个参数

                //  __VA_ARGS__ 表示把用户的 ... 参数传递给NSLog. (VA 表示Value, ARGS表示arguments)

                #define SteveZLog(...) NSLog(__VA_ARGS__)

                

                // ===============然后就可以将所有的NSLog替换为SteveZLog======================

                

                

                // 当在项目中不再需要NSLog()的时候,只要将SteveZLog中对应的代码注释掉即可:

                参考代码:

                #define SteveZLog(...) //NSLog(__VA_ARGS__)

                

                

                */

                           

                * xcode6.1,默认没有创建pch文件。

                   ** 需要自己新建一个

                   

                   ** 创建方式:选择"Supporting Files" ->右键 ->"New File" -> "Other" ->"PCH File" -> "PrefixHeader.pch"

                           

                * 在该文件中定义如下宏:

                    **  #define ABC 10

                           

                * 选中项目 -> Build Setting -> All -> 搜索"prefix head" -> 修改Prefix Header的内容为:

                    ** "$(SRCROOT)/$(PRODUCT_NAME)/PrefixHeader.pch" (如果有问题,换下面的方式,可能会与中文有关)

                    ** 或者

                    ** "$(SRCROOT)/对应的文件夹名/PrefixHeader.pch"

                   

                           

                    /** 参考代码:

                     pch文件代码:

                         #define ABC 10

                         

                         #define Name @""

                         

                         #import "Person.h"

                     

                     ====================================

                     - (void)viewDidLoad {

                         [super viewDidLoad];

                         

                         NSLog(@"%d", ABC);

                         

                         NSLog(@"%@", Name);

                     

                         // ----------------------

                         Person *p = [[Person alloc] init];

                         

                         p.name = @"steve";

                         

                         NSLog(@"%@", p.name);


                     }

                     

                     */

                           

                           

                           

                                   

        /*

            补充,程序开发阶段分为:

                1. 调试阶段,写代码、调错误,需要使用NSLog()。同时在调试阶段系统会自定义一个叫做DEBUG的宏。

         

                2. 发布阶段, 写好的代码生成ipa等压缩文件,上传到AppStore,安装到用户设备上, 不需要NSLog()同时系同会自动删除叫做DEBUG的宏。

         

                3. 综上所述, 我们可以如下自定义一个NSLog():

                

                #ifdef DEBUG 

                #define SteveZLog(...) NSLog(__VA_ARGS__)

                #else

                #define SteveZLog(...)

                #endif

         

                4. 所有与OC相关的宏定义都要写在:

                    #ifdef __OBJC__

                    #endif

                里面,因为写在这个if中的所有内容只有OC代码才可以使用,当在项目中新建了一个.c文件是不可以使用的(不使用就不会报错),否则如果写在了外面,新建一个.c的程序也能使用,就报错了。比如C语言中没有#import,只有#include <xx.h>

         

              参考代码:

                     #ifndef testPCH_PrefixHeader_pch

                     #define testPCH_PrefixHeader_pch

                     

                     // Include any system framework and library headers here that should be included in all compilation units.

                     // You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.

                     

                     // 判断如果是OC文件才引入这些宏,如果是普通C语言文件则不引入。否则当在项目中添加C语言文件时报错。

                     #ifdef __OBJC__

                     

                         #define ABC 10

                         

                         #define Name @"赵晓虎-Steve"

                         

                         #import "Person.h"

                         

                         #ifdef DEBUG

                         #define SteveZLog(...) NSLog(__VA_ARGS__)

                         #else

                         #define SteveZLog(...)

         

                     #endif

                     

                     

                     #endif

         

         */

                    

四、程序启动的完整过程

1.main函数

2.UIApplicationMain

* 创建UIApplication对象

* 创建UIApplication的delegate对象

 

3.delegate对象开始处理(监听)系统事件(没有storyboard)

* 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法

* 在application:didFinishLaunchingWithOptions:中创建UIWindow

* 创建和设置UIWindow的rootViewController

* 显示窗口

 

3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)

* 创建UIWindow

* 创建和设置UIWindow的rootViewController

* 显示窗口


     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS操作系统是由苹果公司开发的移动操作系统,其工作原理可以归纳为以下几个方面: 1. 内核:iOS操作系统基于XNU内核,这是一个混合内核,同时支持微内核和宏内核的特性。它负责处理硬件和软件之间的交互,并提供了一些基本的服务和资源,例如内存管理、进程管理、线程管理等。 2. 硬件抽象层:为了支持多种不同的硬件设备,iOS操作系统引入了硬件抽象层。它提供了一组统一的接口,使得应用程序可以使用相同的代码来访问不同类型的硬件设备。 3. 应用程序框架:iOS操作系统提供了一些预定义的应用程序框架,例如UIKit、Foundation等。这些框架为开发人员提供了一些共享的代码和资源,可以使得开发人员更加高效地开发应用程序。 4. 安全模型:iOS操作系统采用了一系列安全措施来保护用户数据和系统安全。其中包括数据加密、应用程序沙盒、代码签名等。 5. 应用程序生命周期管理:iOS操作系统负责管理应用程序的生命周期,包括启动、运行、挂起和终止等。 6. 用户界面:iOS操作系统提供了一个直观、易用的用户界面,包括多点触控、手势识别等功能,使得用户可以更加方便地使用设备。 总之,iOS操作系统的工作原理是一个复杂的系统工作流程,其中涉及到许多不同的组件和技术。这些组件和技术共同工作,使得iOS操作系统能够提供优秀的性能和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值