XCode的构造iOS应用程序是如何启动的
任何代码自动生成工具都是初学者的大敌!这是我当年完全没学过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应用程序是如何启动的相关推荐
- xcode反汇编调试iOS模拟器程序
分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow http://bl ...
- IDA反汇编/反编译静态分析iOS模拟器程序(一)话说IDA
上个月写了一系列文章<xcode反汇编调试iOS模拟器程序>,是使用xcode来动态反汇编分析iOS模拟器程序的.这个系列则是静态分析,用到IDA来做反汇编/反编译.一些概念不会在此重复, ...
- android运行ios应用程序,Win10手机真能运行Android/iOS程序?如何实现?
Windows 10手机真的能运行安卓和iOS的应用吗?咋实现的啊? 这个倒是假不了,微软早在4月份的2015年度Build大会上就确认了这个消息,Win10是能够兼容安卓和iOS应用的,不过这个兼容 ...
- 使用 Xcode 在越狱 iOS 设备上进行开发调试
1 目的 2 iOS 设备的设置 3 生成私有签名 4 设置 Xcode 4.1 告诉 Xcode 不需要签名 4.2 告诉 Xcode 不用做签发动作 4.3 指示 Xcode 使用私有签名签发 A ...
- 【转】使用Xcode中的iOS SDK给iphone开发出第一个App程序
之前已经折腾过用Xcode开发OS X的程序了,现在继续折腾,用iOS SDK开发移动设备(iphone/ipad/ipod touch)的程序. 1.从iOS Developer Library中找 ...
- 深度解析~iOS应用程序~生命周期
摘要:iOS应用程序一般都是由自己编写的代码和系统框架组成,系统框架提供一些基本infrastructure给App来运行,而开发者则自己编写代码定制App的外观和行为,了解iOS Infrastru ...
- 基于 Amazon Amplify 构建自己的首个 iOS 应用程序(二)
目录 三.添加身份验证 3.1 创建身份验证服务 3.2 部署身份验证服务 3.3 向项目添加 Amplify 身份验证库 3.4 在运行时配置 Amplify 身份验证库 3.5 在运行时触发身份验 ...
- iOS 11开发教程(三)运行第一个iOS 11程序
iOS 11开发教程(三)运行第一个iOS 11程序 运行iOS11程序 创建好项目之后,就可以运行这个项目中的程序了.单击运行按钮,如果程序没有任何问题的话,会看到如图1.6和1.7的运行效果. 图 ...
- Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序
Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序 C#原本是用来编写Windows以及Windows Phone的应用程序.自从Xamarin问世后,C#的作用就发生了很大的变化. ...
最新文章
- leetcode 3. Longest Substring Without Repeating Characters
- Paddle 环境中 使用LeNet在MNIST数据集实现图像分类
- 复现经典:《统计学习方法》第22章 无监督学习方法总结
- 多网卡下如何配置指定IP走某个路由器(适用于外网不通,但是钉钉服务器通的情况)...
- 2015年网页设计最佳颜色搭配的9种选择
- 日行千里,全凭“车”况,为什么我们要升级平台
- JavaScript:this是什么?
- 【BZOJ2337】XOR和路径,概率期望DP+高斯消元
- 王思聪连收3条限制消费令后,债主回应:对于他是小钱,对于我们可是巨款
- 企业混合云的VERITAS数据保护方案
- @程序员,你的编程方式已过时,云开发时代来临!
- Vue实现按钮和文本框的切换
- mac上c++11的编译问题
- Atitit. atiOrder Order 订单管理框架的设计
- 现实的复杂性与系统的复杂性
- Mybatis时区问题
- ContentProvider理解
- # 行动、任务、项目概念区分
- Power bi 超市运营数据分析
- oracle数字转换成人民币大写
热门文章
- SparkSQL 总结
- 放弃linux桌面,观点|Linux 应当放弃桌面
- t检验、Wilcoxon 符号秩检验、Mann-Whitney 秩和检验 Python实现
- P1498 南蛮图腾
- SPRING注解驱动开发-雷神课程超详细笔记
- imgburn dvd_如何使用ImgBurn刻录或刻录包含CD文本的CD(CD-R)
- 在macos上刻录光盘
- Apache Commons Email 怎样设置接收方发送已读回执?
- SVN使用SVN小乌龟对比单个文件任意版本的差异
- [Zer0pts2020]Can you guess it?(basename漏洞)