任何代码自动生成工具都是初学者的大敌!这是我当年完全没学过Windows程序,抱着本莫名其妙的教程,第一次用MS VisualStudio的Wizzard生成的代码时的感悟。现在想想真的很好笑,一个对Eventloop一知半解,对MVC模式晕头转向,完全对Windows程序基本工具库一无所知的人,却去看那个Wizzard生成的,被MFC过度封装过的代码,那真的是纯纯的浪费时间。多年以后,我才明白,那些自动工具也好,模板也好,其实都是给那些熟手提高工作效率的,对于生手来说,它们只会让事情变的更糟,因为一旦出了什么问题,生手根本不知道从什么地方下手去解决!
  使用XCode开发iOS设备上的应用程序,它也会帮你生成好很多源文件和资源,你什么都不用改,就可以编译运行,从main函数开始,到应用程序启动,都发生了什么呢?XCode生成的项目中,会包含一个非常简单的main.m文件,里面的代码简单而单纯(苹果推荐你不要做任何的变更):
  view sourceprint?1#import
  2
  3int main(int argc, char *argv[]) {
  4
  5 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]init];
  6 int retVal = UIApplicationMain(argc, argv, nil, nil);
  7 [pool release];
  8 return retVal;
  9}
  UIApplication一执行,然后就只能看到应用程序的代理的方法
  didFinishLaunchingWithOptions
  被执行了。
  UIApplicationMain干了什么呢?
  首先,它寻找一个叫Info.plist的XML文件,注意,这个文件的名字是固定的,如果你看你的项目,会发现名字是-Info.plist,没关系,这个是Project的设定,它会在发布时被copy成Info.plist,你可以在【Project】->【Edit Active Target""】的info.plist选项更改使用哪个plist配置文件作为UIApplication使用的主配置文件。UIApplication对象读取Info.plist中的NSMainNibFile键,以这个键的内容所指向的nib文件的内容来装载UIApplication对象的各种属性。
  这里说一下nib文件,虽然,这个文件是用interfacebuilder来打开,但是它所包含的内容不仅仅和用户界面有关,它实际上,是一个object-C对象数据库!它里面存储的内容,都是某一个object-C对象的属性的值,说的理论点,就是个对象串行化文件,苹果cocoa框架的程序,可以用这个文件中的内容来构建事先设定好的对象(不是类)。

  接上页
  检查这个主nib文件,就会看到,XCode已经为你的实现了UIApplicationDelegate协议的类,创建好了一个对象,名字很直观,不用多说,再检查它的连接属性,就会发现,它已经被连接到了UIApplication对象的delegate属性上去了,意思是,UIApplication对象被构建时,它的Delegate就会是你的应用代理类了。
  后面的不用多说了,连接都已经建立好,UIApplication对象就依次呼叫代理的不同方法,启动Eventloop,那个通用的无限循环。
  最后说下代理这个东西,这东西的名字起的......太让人觉得玄妙了,其实,它就是java或者C#里的interface,估计是object-C出现的比较早,还没有想到interface这么合适的名字。

本篇文章来源于 黑软基地-中国最大的黑客软件安全教程下载站!(手机资讯) 原文链接:http://www.hackvip.com/mobiwen/html/Mobile_252517.html

XCode的构造iOS应用程序是如何启动的相关推荐

  1. xcode反汇编调试iOS模拟器程序

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow http://bl ...

  2. IDA反汇编/反编译静态分析iOS模拟器程序(一)话说IDA

    上个月写了一系列文章<xcode反汇编调试iOS模拟器程序>,是使用xcode来动态反汇编分析iOS模拟器程序的.这个系列则是静态分析,用到IDA来做反汇编/反编译.一些概念不会在此重复, ...

  3. android运行ios应用程序,Win10手机真能运行Android/iOS程序?如何实现?

    Windows 10手机真的能运行安卓和iOS的应用吗?咋实现的啊? 这个倒是假不了,微软早在4月份的2015年度Build大会上就确认了这个消息,Win10是能够兼容安卓和iOS应用的,不过这个兼容 ...

  4. 使用 Xcode 在越狱 iOS 设备上进行开发调试

    1 目的 2 iOS 设备的设置 3 生成私有签名 4 设置 Xcode 4.1 告诉 Xcode 不需要签名 4.2 告诉 Xcode 不用做签发动作 4.3 指示 Xcode 使用私有签名签发 A ...

  5. 【转】使用Xcode中的iOS SDK给iphone开发出第一个App程序

    之前已经折腾过用Xcode开发OS X的程序了,现在继续折腾,用iOS SDK开发移动设备(iphone/ipad/ipod touch)的程序. 1.从iOS Developer Library中找 ...

  6. 深度解析~iOS应用程序~生命周期

    摘要:iOS应用程序一般都是由自己编写的代码和系统框架组成,系统框架提供一些基本infrastructure给App来运行,而开发者则自己编写代码定制App的外观和行为,了解iOS Infrastru ...

  7. 基于 Amazon Amplify 构建自己的首个 iOS 应用程序(二)

    目录 三.添加身份验证 3.1 创建身份验证服务 3.2 部署身份验证服务 3.3 向项目添加 Amplify 身份验证库 3.4 在运行时配置 Amplify 身份验证库 3.5 在运行时触发身份验 ...

  8. iOS 11开发教程(三)运行第一个iOS 11程序

    iOS 11开发教程(三)运行第一个iOS 11程序 运行iOS11程序 创建好项目之后,就可以运行这个项目中的程序了.单击运行按钮,如果程序没有任何问题的话,会看到如图1.6和1.7的运行效果. 图 ...

  9. Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序

    Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序 C#原本是用来编写Windows以及Windows Phone的应用程序.自从Xamarin问世后,C#的作用就发生了很大的变化. ...

最新文章

  1. leetcode 3. Longest Substring Without Repeating Characters
  2. Paddle 环境中 使用LeNet在MNIST数据集实现图像分类
  3. 复现经典:《统计学习方法》第22章 无监督学习方法总结
  4. 多网卡下如何配置指定IP走某个路由器(适用于外网不通,但是钉钉服务器通的情况)...
  5. 2015年网页设计最佳颜色搭配的9种选择
  6. 日行千里,全凭“车”况,为什么我们要升级平台
  7. JavaScript:this是什么?
  8. 【BZOJ2337】XOR和路径,概率期望DP+高斯消元
  9. 王思聪连收3条限制消费令后,债主回应:对于他是小钱,对于我们可是巨款
  10. 企业混合云的VERITAS数据保护方案
  11. @程序员,你的编程方式已过时,云开发时代来临!
  12. Vue实现按钮和文本框的切换
  13. mac上c++11的编译问题
  14. Atitit. atiOrder   Order 订单管理框架的设计
  15. 现实的复杂性与系统的复杂性
  16. Mybatis时区问题
  17. ContentProvider理解
  18. # 行动、任务、项目概念区分
  19. Power bi 超市运营数据分析
  20. oracle数字转换成人民币大写

热门文章

  1. SparkSQL 总结
  2. 放弃linux桌面,观点|Linux 应当放弃桌面
  3. t检验、Wilcoxon 符号秩检验、Mann-Whitney 秩和检验 Python实现
  4. P1498 南蛮图腾
  5. SPRING注解驱动开发-雷神课程超详细笔记
  6. imgburn dvd_如何使用ImgBurn刻录或刻录包含CD文本的CD(CD-R)
  7. 在macos上刻录光盘
  8. Apache Commons Email 怎样设置接收方发送已读回执?
  9. SVN使用SVN小乌龟对比单个文件任意版本的差异
  10. [Zer0pts2020]Can you guess it?(basename漏洞)