swift中的@UIApplicationMain示例详解
前言
最近在学习swift,在学习中遇到了一些需要整理记录的知识点,下面本文主要介绍了关于swift中@UIApplicationMain的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
程序如何开始的
C 系列语言中,程序的入口都是 main 函数,一个 Objective-C 的 iOS app 项目在新建时,Xcode 会给我们创建好一个 main.m 的文件。
#import <UIKit/UIKit.h> #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } }
我们调用了 UIKit 的 UIApplicationMain 方法,这个方法根据第三个参数初始化一个 UIApplication 或者它的子类对象开始接收事件。当传入 nil 时则使用默认的 UIApplication。最后一个参数指定了 AppDelegate 类作为应用的委托,用来接收与应用生命周期相关的委托方法。
- (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 { }
虽然这个方法标明要返回一个 int,但其实它并不会真正的返回,而是一直存在于内存中,直到用户或者系统将应用强制终止。
swift 中的对应情况
创建一个 swift 的项目之后,我们发现所有的文件中并没有一个类似于 Objective-C 中的 main.m 文件,也没有 main 函数。唯一和 main 有关系的就是在 AppDelegate 中有一个 @UIApplicationMain 标签。
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { }
这个标签的作用就是将标注的类作为委托,创建一个 UIApplication 并启动整个程序。一般情况我们不需要对这个标签做任何修改,但如果我们想使用 UIApplication 的子类而不是它本身,我们就要自定义一个 main.swift 文件了(记得删除 @UIApplicationMain 标签)。这个文件我们不需要定义作用域,直接写代码就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) )
这样每次发送事件(点击按钮之类的)我们都可以监听到了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
相关文章
Swift 中的 Actors 使用及如何防止数据竞争问题(示例详解)
Swift中的Actors旨在完全解决数据竞争问题,但重要的是要明白,很可能还是会遇到数据竞争,本文将介绍Actors是如何工作的,以及你如何在你的项目中使用它们,感兴趣的朋友跟随小编一起看看吧2023-06-06swift4 使用DrawerController实现侧滑菜单功能的示例代码
这篇文章主要介绍了swift4 使用DrawerController实现侧滑功能的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-06-06Swift中的条件切换语句switch...case学习教程
这篇文章主要介绍了Swift中的条件切换语句switch...case学习教程,Swift中的switch...case支持的数据类型很多,非常之强大,需要的朋友可以参考下2016-04-04Swift、Objective-C、Cocoa混合编程设置指南
这篇文章主要介绍了Swift、Objective-C、Cocoa混合编程设置指南,需要的朋友可以参考下2014-07-07简单了解Swift语言中的break和continue语句的用法
这篇文章主要简单介绍了Swift语言中的break和continue语句的用法,与其他语言的一样用于循环语句流程控制,需要的朋友可以参考下2015-11-11
最新评论