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

 

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

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

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

过了几个月,回到来想一想当初的问题,无非是没有理解xib的原理,没有弄清楚在ios里,若是经过xib来建立对象。xcode

对于xib建立对象,能够从启动开始。咱们来看看windows base project的作法和 single view project的作法。iphone


一:对于 window base 的建立步骤:函数

第1步:将建立的xib设置为启动frame。这个能够在 target>>summary>>main interface中设置。ui

这有点至关于将应用的启动入口设置为本xib。spa

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

那就须要你在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来生成,后面的作法和方式一就没啥区别了。



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

相关文章
相关标签/搜索