swift中的@UIApplicationMain示例詳解
前言
最近在學(xué)習(xí)swift,在學(xué)習(xí)中遇到了一些需要整理記錄的知識點(diǎn),下面本文主要介紹了關(guān)于swift中@UIApplicationMain的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。
程序如何開始的
C 系列語言中,程序的入口都是 main 函數(shù),一個(gè) Objective-C 的 iOS app 項(xiàng)目在新建時(shí),Xcode 會給我們創(chuàng)建好一個(gè) 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 方法,這個(gè)方法根據(jù)第三個(gè)參數(shù)初始化一個(gè) UIApplication 或者它的子類對象開始接收事件。當(dāng)傳入 nil 時(shí)則使用默認(rèn)的 UIApplication。最后一個(gè)參數(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 { }
雖然這個(gè)方法標(biāo)明要返回一個(gè) int,但其實(shí)它并不會真正的返回,而是一直存在于內(nèi)存中,直到用戶或者系統(tǒng)將應(yīng)用強(qiáng)制終止。
swift 中的對應(yīng)情況
創(chuàng)建一個(gè) swift 的項(xiàng)目之后,我們發(fā)現(xiàn)所有的文件中并沒有一個(gè)類似于 Objective-C 中的 main.m 文件,也沒有 main 函數(shù)。唯一和 main 有關(guān)系的就是在 AppDelegate 中有一個(gè) @UIApplicationMain 標(biāo)簽。
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { }
這個(gè)標(biāo)簽的作用就是將標(biāo)注的類作為委托,創(chuàng)建一個(gè) UIApplication 并啟動整個(gè)程序。一般情況我們不需要對這個(gè)標(biāo)簽做任何修改,但如果我們想使用 UIApplication 的子類而不是它本身,我們就要自定義一個(gè) main.swift 文件了(記得刪除 @UIApplicationMain 標(biāo)簽)。這個(gè)文件我們不需要定義作用域,直接寫代碼就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ā)送事件(點(diǎn)擊按鈕之類的)我們都可以監(jiān)聽到了。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Swift?中的?Actors?使用及如何防止數(shù)據(jù)競爭問題(示例詳解)
Swift中的Actors旨在完全解決數(shù)據(jù)競爭問題,但重要的是要明白,很可能還是會遇到數(shù)據(jù)競爭,本文將介紹Actors是如何工作的,以及你如何在你的項(xiàng)目中使用它們,感興趣的朋友跟隨小編一起看看吧2023-06-06swift中自定義正則表達(dá)式運(yùn)算符=~詳解
這篇文章主要給大家介紹了關(guān)于swift中自定義正則表達(dá)式運(yùn)算符=~的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12swift4 使用DrawerController實(shí)現(xiàn)側(cè)滑菜單功能的示例代碼
這篇文章主要介紹了swift4 使用DrawerController實(shí)現(xiàn)側(cè)滑功能的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06Swift中的條件切換語句switch...case學(xué)習(xí)教程
這篇文章主要介紹了Swift中的條件切換語句switch...case學(xué)習(xí)教程,Swift中的switch...case支持的數(shù)據(jù)類型很多,非常之強(qiáng)大,需要的朋友可以參考下2016-04-04Swift、Objective-C、Cocoa混合編程設(shè)置指南
這篇文章主要介紹了Swift、Objective-C、Cocoa混合編程設(shè)置指南,需要的朋友可以參考下2014-07-07簡單了解Swift語言中的break和continue語句的用法
這篇文章主要簡單介紹了Swift語言中的break和continue語句的用法,與其他語言的一樣用于循環(huán)語句流程控制,需要的朋友可以參考下2015-11-11swiftui開發(fā)之padding默認(rèn)值設(shè)置詳解
這篇文章主要為大家介紹了swiftui開發(fā)之padding默認(rèn)值設(shè)置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09