文档章节

ios应用程序的两种启动方式

法斗斗
 法斗斗
发布于 2015/09/02 17:53
字数 1270
阅读 27
收藏 0

 

ios应用程序的两种启动方式 

分类: IOS2012-10-31 17:04 5154人阅读 评论(0) 收藏 举报

记得几个月前刚接触ios时,因为要急着完成任务,搭建应用的方式完全按照书本,而书本讲的是xcode3,而装的xcode的版本是4。所以,书上的一些东东和xcode的版本对不上,非常苦恼,为了创建一个windows base 的project,都费劲了心思。

过了几个月,回到来想想当初的问题,无非是没有理解xib的原理,没有弄清楚在ios里,如果通过xib来创建对象。

对于xib创建对象,可以从启动开始。我们来看看windows base project的做法和 single view project的做法。


一:对于 window base 的创建步骤:

第1步:将创建的xib设置为启动frame。这个可以在 target>>summary>>main interface中设置。

这有点相当于将应用的启动入口设置为本xib。

第2步:这个启动xib的file owner一定是 UIApplication。但真正的全局AppDelegate是哪个呢?

那就需要你在xib中新建一个Object,然后把类名设置为您的真正的启动代理类:xxxx_AppDelegate

注意:这里需要将启动类绑定到 file owner的delegate。(和UI元素的绑定方法一样)。

我们再看看main函数:

        int retVal = UIApplicationMain(argc, argv,nilnil);

这里没有指定启动的代理类。我猜想最后一个参数不设置的话,就会从启动xib中的UIApplication.delegate来指定。


第3步:继然是window base,那你当然需要在启动xib中创建一个window。

创建的window与代码如何对应呢?一般我们是在 xxxx_AppDelegate中创建一个UIWindow。

然后在xib中将window与代理中的实例连接上,然后代码中就直接用了,和使用一个控件一样。

这样,程序一启动,就创建了一个UIWindow。不需要你写UIWindow的创建代码。

第4步:作为一个UI程序,应该会有界面逻辑,而界面需要包含在UIViewController中,

所以,你可以在启动xib中创建UIViewController,绘制你的界面。或者直接关联别一个nib文件。

当然,你要使用它,仍然需要在xxxx_AppDelegate中声明UIViewController中的对象viewController,然后在xib中建立连接。

注意:这种方式下,UIViewController是自动创建的,不需要你写创建的代码。

最后一步:经过上面的动作。在启动代理的启动方法didFinishLaunchingWithOptions中添加以下代码就搞定了。

    [window addSubview:viewController.view];

    [window makeKeyAndVisible];

按照上面这种方式,我们的启动界面没有使用 alloc来创建任何ui对象,所有ui对象都是通过xib加载时自动生成的。

需要注意的是,这种方式,需要将xib设置为 main interface。如果您的程序是iphone和ipad适应的,那可以设置两个不同的启动xib.

如果在xcode4中要创建 window base project,差不多就上面的套路。靠xib来生成window和viewController.

注:我也见到过没有设置main interface的程序,并且在main中也没有设置AppDelegate类。我猜想,默认为使用MainWindow.xib做为

启动Interface。好象书中的hello_world就是这样的。


二:再看看single view project的创建方式。

第1步:当然,我们不能设置 main interface。我们需要看看main函数。在其中设定启动代理类。

UIApplicationMain(argc, argv,nilNSStringFromClass([SingViewTest_AppDelegateclass]));

在这里,第4个参数我们指定了启动的AppDelegate,而不是象上面那样,通过xib来指定启动代理类。


第2步:在启动方法中,自行创建window

    self.window = [[[UIWindowallocinitWithFrame:[[UIScreenmainScreenbounds]] autorelease];

  上面的代码创建一个全屏的窗体,看看,是我们自已alloc的。


第3步:通过程序来创建 SingelView的viewControoler.

    self.viewController = [[[SingViewTest_ViewControllerallocinitWithNibName:@"SingViewTest_ViewController"bundle:nil]autorelease];

  如果您的viewController想通过xib来加载(通常的方式),那就采取上面的方式。

如果您不想使用 UI 设计器,你也可以

    MyViewController *vc = [[ MyViewControlleralloc] init];

当然,这种情况你需要在viewdidLoad中动态生成您的ui元素。

最后一步:将viewcontroller的ui显示出来。

    self.window.rootViewController =self.viewController;

    [self.windowmakeKeyAndVisible];


通过上面两个工程的创建,可以看出,ios提供两个启动入口的方式。

方式一:指定xib做为启动interface,这种方式下,需要自已指定启动AppDelegate。

可以通过创建 object,然后改类名,再绑定的方式。

这种方式下,可以以此为起点,将真正的启动window,启动ViewController在此处创建和连接。

对于简单的应用,我们还可以在这个启动的xib里,将启动的ui都画好。


方式二:在main中指定启动AppDelegate。

这个需要修改 main函数中 UIApplicationMain方法的最后一个参数。

这种方式下,启动的windows,viewController需要自已通过alloc来生成,后面的做法和方式一就没啥区别了。



写得很乱,主要是加深一下自已的记忆。


本文转载自:

上一篇: iOS程序启动原理
下一篇: Masonry介绍
法斗斗
粉丝 23
博文 368
码字总数 17774
作品 0
杨浦
程序员
私信 提问
使用UniDAC在Delphi XE4中开发iOS应用

使用UniDAC在Delphi XE4中开发iOS应用   核心提示:Delphi XE4的发布让很多Delphi开发者欣喜若狂,毫无疑问它使得Delphi开发更简单且更容易被理解,而且让开发无论是iPhone、iPad还是iPod的...

vga
2014/06/01
571
0
ios界面自动化工具--Appium

ios界面自动化工具--Appium Appium是一款开源的移动端自动化测试框架,支持Android和Ios,之前简单介绍过Appium,链接http://www.yeetrack.com/?p=639。最近在做ios的自动化测试,再详细记录一...

youthflies
2014/10/29
1K
0
IOS 内置URL schemes简介

在IOS的应用中经常会看到一些应用程序通过某个点击动作而直接跳到App Store页面,开始很奇怪这种第三方应用于IOS的系统应用交互时怎么实现的。后来发现苹果的开发者文档中关于这种通信的实现...

big军
2013/03/16
8.7K
2
IOS学习,最简单的表格应用程序,学习,列出博客

IOS编程浅蓝教程,这是博客地址http://www.cnblogs.com/haichao/category/425378.html IOS编程浅蓝教程:锲子 IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备 IOS编程浅蓝教程(二) Hel...

andy521zhu
2015/01/17
174
0
浅谈iOS开发中的对象归档

iOS提供的数据持久化方式有:SQLiteCoreData属性列表、NSUserDefault对象归档。 这里来简单介绍下iOS开发中的对象归档: 对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化...

泊菜
2014/11/27
4K
8

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部