2013-10-08 45 views
0

我是Objective-C和iOS編程的新手。我已經閱讀了一些Apple的「入門」文檔,並且已經下載了一些示例應用程序以嘗試熟悉應用程序中發生的事情。我感到困惑的是應用程序啓動時發生了什麼。我在main.m中看到UIApplicationMain被調用並調用AppDelegate。從我讀過的,現在,如果applicationDidFinishLaunching返回true,應用程序將進入主事件循環。瞭解iOS 7應用程序的應用程序流程。啓動時會發生什麼?

這一切是否正確?如果是這樣,我如何將我的代碼與事件綁定?事件發生時,我在哪裏創建類的實例?

最後,從我的理解中,Xcode現在創建了所有帶故事板的模板應用程序。但是,我看到的一些應用程序有點舊,並且不使用storyboard,但在目錄中的任何位置都看不到.xib或.nib文件,但應用程序已成功構建。假設應用程序需要這些文件,我錯了嗎?

回答

2

應用程序不需要運行.xib或.nib。許多程序員不使用任何生成故事板或.nib文件的可視化設計工具。如果你願意,你可以用代碼完全定義你的用戶界面。

對main.m中的UIApplicationMain的調用創建了一個單例UIApplication對象,設置了一個事件循環,並設置了與UIApplication配合使用的UIApplicationDelegate,以便您可以在其生命週期中的關鍵點自定義應用程序的行爲。 UIApplication爲您管理事件循環。它接收來自系統的事件,並將它們發送到您的代碼進行處理。

爲了真正理解事件處理,您需要了解響應者鏈。如果您查看應用程序委託的超類,則會看到它是UIResponder。這是讓對象響應和處理事件的接口。它是UIApplication和UIView的超類,可以處理大多數原始事件處理。事件遵循通過代碼定義的路徑。在最簡單的情況下,觸摸事件,UIApplication從事件循環中彈出一個事件並將其傳遞給UIWindow。 UIWindow將執行一個命中測試,嘗試將其直接傳遞到手指下的UIView。它變得更加複雜,運動事件採取不同的路徑,但重要的是,很多原始事件處理都是由UIKit爲您處理的。你真正需要做的就是設置你的UIWindow和它的rootViewController,事件將通過你所有的UIKit響應者的特定的傳遞路徑。您可以在這裏詳細閱讀https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/event_delivery_responder_chain/event_delivery_responder_chain.html的響應鏈。

0

當你的應用開始,下面的委託方法將被調用順序:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions; 

- (void)applicationDidBecomeActive:(UIApplication *)application; 

此外,您的初始視圖控制器將獲得創建和顯示和下面的方法將被調用(假設你是用故事板或XIB文件):

-(void)viewDidLoad; 

-(void) viewWillAppear:(BOOL)animated; 

至於「捆綁代碼事件」,你說的是什麼類型的事件?你想達到什麼目的?

如果您正在使用故事板,則不再需要使用xib文件,但是,如果您願意,也可以使用。

相關問題