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來生成,後面的作法和方式一就沒啥區別了。



寫得很亂,主要是加深一下自已的記憶。

相關文章
相關標籤/搜索