AppDelegate
import UIKit
/**
在 OC 中是有一个 main.m 文件以及一个 main 函数的,
但是在 swift 中被去掉了, 取而代之的是在 AppDelegate.m 中使用 @main ( 早期 是 @UIApplicationMain )
/// 这个标签的作用就是将标注的类作为委托,创建一个 UIApplication 并启动整个程序
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
}
因此,想要实现这个功能就必须手动给它添加一个 main 方法
main 函数中执行了一个 UIApplicationMain 这个函数(虽然这个方法标明要返回一个 int,
但其实它并不会真正的返回,而是一直存在于内存中,直到用户或者系统将应用强制终止。)
各个参数的意思:
argc 系统传入参数的个数
agrv 系统传入参数的值列表
principalClassName 表示要创建的应用程序对象(app 的象征,该类必须是 UIApplication 或者它的字类)。
如果传 nil 默认就表示 UIApplication 类。
delegateClassName 表示 给应用程序指定一个代理对象,该类必须遵守 UIApplicationDelegate 协议
在应用程序启动, 进入 runloop 并开始接收事件前,
UIApplication 对象会向其委托发送一个特定的消息,
让应用能够完成相应的初始化工作.
这个特定的消息就是我们在 AppDelegate.m 文件中的
application:applicationdidFinishLaunchingWithOptions:.
一般而言我们可以在此方法内实现我们需要的初始化功能.
在项目中添加 main 方法
首先注释掉 AppDelegate.m 中的 @UIApplicationMain
添加一个 main.swift 文件,并在文件中添加如下代码
*/
// @main
class AppDelegate: UIResponder, UIApplicationDelegate {
}
==========
main 文件
import UIKit
import Foundation
UIApplicationMain(CommandLine.argc, CommandLine.unsafeArgv, NSStringFromClass(CustomApplication.self), NSStringFromClass(AppDelegate.self));
class CustomApplication: UIApplication {
// print("\n 这样在 sendEvent 和 sendAction 内部,就可以监听到事件的发送了")
override func sendEvent(_ event: UIEvent) {
print("\n 在这里处理一些统一的逻辑")
super.sendEvent(event)
}
override func sendAction(_ action: Selector, to target: Any?, from sender: Any?, for event: UIEvent?) -> Bool {
print("\n 在这里处理一些统一的逻辑, 例如 记录行为日志")
return super.sendAction(action, to: target, from: sender, for: event)
}
}
网友评论