當(dāng)我們?cè)趯慜C項(xiàng)目的時(shí)候疫铜,會(huì)有一個(gè)main.m文件彻磁,里面有一個(gè)main函數(shù)留凭,在這個(gè)函數(shù)中喚醒a(bǔ)pp岁钓。
main函數(shù)作為程序啟動(dòng)后的第二個(gè)函數(shù)被調(diào)用升略,然后在main函數(shù)中再啟動(dòng)UIApplication,并綁定AppDelegate屡限。
Swift項(xiàng)目中的main函數(shù)為何隱藏
當(dāng)我們創(chuàng)建一個(gè)Swift項(xiàng)目的時(shí)候品嚣,發(fā)現(xiàn)沒(méi)有了main.swift文件,這是我們慌了钧大,為什么呢翰撑?哈哈哈,官方的解釋是這樣的
In Xcode, Mac templates default to including a
“main.swift” file, but for iOS apps the default for new
iOS project templates is to add @UIApplicationMain to a
regular Swift file. This causes the compiler to synthesize
a mainentry point for your iOS app, and eliminates the
need for a “main.swift” file.
這段話的意思是啊央,Swift項(xiàng)目中添加了@UIApplicationMain到swift文件中眶诈,使得編譯器合成了一個(gè)app入口,所以不需要main.swift文件
細(xì)心的同學(xué)會(huì)發(fā)現(xiàn)AppDelegate文件中多了個(gè)@UIApplicationMain的標(biāo)志瓜饥,啟動(dòng)app并打斷點(diǎn)逝撬,發(fā)現(xiàn)main函數(shù)其實(shí)還是存在的
應(yīng)該是蘋果認(rèn)為我們并不需要自行配置app入口,所以干脆簡(jiǎn)化了項(xiàng)目配置乓土,使用更加簡(jiǎn)單的方式啟動(dòng)應(yīng)用宪潮,但是有時(shí)候我們可能需要自己配置入口,例如創(chuàng)建UIApplication的子類時(shí)
main.swift
如果你希望通過(guò)自行配置入口的方式來(lái)創(chuàng)建一個(gè)UIApplication子類趣苏,那么就要?jiǎng)?chuàng)建一個(gè)main.swfit文件
首先創(chuàng)建一個(gè)swift文件狡相,命名為main
main.swift中代碼如下
import Foundation
import UIKit
UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(UIApplication), NSStringFromClass(AppDelegate))
這里把UIApplication換成你自定義的Application
寫好main.swift后,需要把AppDelegate中的@UIApplicationMain注釋掉,重新運(yùn)行項(xiàng)目即可食磕。
main函數(shù)的參數(shù)
以前OC的main函數(shù)的argv參數(shù)是一個(gè)字符串指針尽棕,打印出來(lái)后是應(yīng)用程序的路徑。swift中main函數(shù)的 Process.unsafeArgv 參數(shù)變成了一串十六進(jìn)制數(shù)字彬伦,應(yīng)該也是代表應(yīng)用程序地址滔悉。至于為何要修改成數(shù)字蟀悦,也許這是出于安全性考慮吧