欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

swift中的@UIApplicationMain示例詳解

 更新時間:2017年12月28日 10:00:02   作者:Inlight先森  
這篇文章主要給大家介紹了關(guān)于swift中@UIApplicationMain的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

最近在學(xué)習(xí)swift,在學(xué)習(xí)中遇到了一些需要整理記錄的知識點,下面本文主要介紹了關(guān)于swift中@UIApplicationMain的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細的介紹吧。

程序如何開始的

C 系列語言中,程序的入口都是 main 函數(shù),一個 Objective-C 的 iOS app 項目在新建時,Xcode 會給我們創(chuàng)建好一個 main.m 的文件。

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[])
{
 @autoreleasepool {
  return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
 }
}

我們調(diào)用了 UIKit 的 UIApplicationMain 方法,這個方法根據(jù)第三個參數(shù)初始化一個 UIApplication 或者它的子類對象開始接收事件。當(dāng)傳入 nil 時則使用默認的 UIApplication。最后一個參數(shù)指定了 AppDelegate 類作為應(yīng)用的委托,用來接收與應(yīng)用生命周期相關(guān)的委托方法。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
- (void)applicationWillResignActive:(UIApplication *)application {
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
}
- (void)applicationWillTerminate:(UIApplication *)application {
}

雖然這個方法標(biāo)明要返回一個 int,但其實它并不會真正的返回,而是一直存在于內(nèi)存中,直到用戶或者系統(tǒng)將應(yīng)用強制終止。

swift 中的對應(yīng)情況

創(chuàng)建一個 swift 的項目之后,我們發(fā)現(xiàn)所有的文件中并沒有一個類似于 Objective-C 中的 main.m 文件,也沒有 main 函數(shù)。唯一和 main 有關(guān)系的就是在 AppDelegate 中有一個 @UIApplicationMain 標(biāo)簽。

import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
}

這個標(biāo)簽的作用就是將標(biāo)注的類作為委托,創(chuàng)建一個 UIApplication 并啟動整個程序。一般情況我們不需要對這個標(biāo)簽做任何修改,但如果我們想使用 UIApplication 的子類而不是它本身,我們就要自定義一個 main.swift 文件了(記得刪除 @UIApplicationMain 標(biāo)簽)。這個文件我們不需要定義作用域,直接寫代碼就OK。

import UIKit
class MyApplication: UIApplication {
 override func sendEvent(_ event: UIEvent) {
  super.sendEvent(event)
  print("Event sent:\(event)")
 }
}
UIApplicationMain(
 CommandLine.argc,
 UnsafeMutableRawPointer(CommandLine.unsafeArgv)
  .bindMemory(
   to: UnsafeMutablePointer<Int8>.self,
   capacity: Int(CommandLine.argc)),
 NSStringFromClass(MyApplication.self),
 NSStringFromClass(AppDelegate.self)
)

這樣每次發(fā)送事件(點擊按鈕之類的)我們都可以監(jiān)聽到了。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論