国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Swift > 正文

swift中的@UIApplicationMain示例詳解

2020-03-09 17:42:43
字體:
供稿:網(wǎng)友

前言

最近在學(xué)習(xí)swift,在學(xué)習(xí)中遇到了一些需要整理記錄的知識(shí)點(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 會(huì)給我們創(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 或者它的子類對(duì)象開始接收事件。當(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í)它并不會(huì)真正的返回,而是一直存在于內(nèi)存中,直到用戶或者系統(tǒng)將應(yīng)用強(qiáng)制終止。

swift 中的對(duì)應(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@UIApplicationMainclass AppDelegate: UIResponder, UIApplicationDelegate {}

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

import UIKitclass 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é)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到swift教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 云阳县| 唐山市| 庄河市| 绥德县| 两当县| 介休市| 龙陵县| 新安县| 通化县| 醴陵市| 塔城市| 麻栗坡县| 崇左市| 宣威市| 融水| 师宗县| 昌乐县| 蚌埠市| 临猗县| 防城港市| 磴口县| 革吉县| 额尔古纳市| 宁城县| 新乡县| 铁力市| 武定县| 葫芦岛市| 北辰区| 盖州市| 嘉义市| 平罗县| 尖扎县| 保亭| 淄博市| 会泽县| 临沭县| 隆回县| 林西县| 昌宁县| 房产|