Swift学习积累

Swift之自定义main 函数

2020-07-08  本文已影响0人  Funnyer

main 函数是程序的入口
在OC里,main 函数是这样的:

int main(int argc, char * argv[]) {
  @autoreleasepool {
      return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  }
}

main函数中执行了一个UIApplicationMain这个函数(虽然这个方法标明要返回一个 int,但其实它并不会真正的返回,而是一直存在于内存中,直到用户或者系统将应用强制终止。)

int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

各个参数的意思:

在应用程序启动,进入runloop并开始接收事件前,UIApplication对象会向其委托发送一个特定的消息,让应用能够完成相应的初始化工作.这个特定的消息就是我们在AppDelegate.m文件中的
application:applicationdidFinishLaunchingWithOptions:.一般而言我们可以在此方法内实现我们需要的初始化功能.

到了Swift ,main 函数就“消失了”,它的存在的形式变成了@UIApplicationMain

/// 这个标签的作用就是将标注的类作为委托,创建一个 UIApplication 并启动整个程序
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
}

当我们有需求,需要自定义一个main 函数的时候,就需要创建一个main.swift 文件

UIApplicationMain(CommandLine.argc, CommandLine.unsafeArgv, NSStringFromClass(CustomApplication.self), NSStringFromClass(AppDelegate.self));

class CustomApplication: UIApplication {
    override func sendEvent(_ event: UIEvent) {
        // 在这里处理一些统一的逻辑
        super.sendEvent(event)
    }
    
    override func sendAction(_ action: Selector, to target: Any?, from sender: Any?, for event: UIEvent?) -> Bool {
        // 在这里处理一些统一的逻辑, 例如 记录行为日志
        return super.sendAction(action, to: target, from: sender, for: event)
    }
}

这样在sendEvent 和 sendAction 内部,就可以监听到事件的发送了。

上一篇 下一篇

猜你喜欢

热点阅读