swift中的@UIApplicationMain示例详解
前言
最近在学习swift,在学习中遇到了一些需要整理记录的知识点,下面本文主要介绍了关于swift中@UIApplicationMain的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
程序如何开始的
C系列语言中,程序的入口都是main函数,一个Objective-C的iOSapp项目在新建时,Xcode会给我们创建好一个main.m的文件。
#import#import"AppDelegate.h" intmain(intargc,char*argv[]) { @autoreleasepool{ returnUIApplicationMain(argc,argv,nil,NSStringFromClass([AppDelegateclass])); } }
我们调用了UIKit的UIApplicationMain方法,这个方法根据第三个参数初始化一个UIApplication或者它的子类对象开始接收事件。当传入nil时则使用默认的UIApplication。最后一个参数指定了AppDelegate类作为应用的委托,用来接收与应用生命周期相关的委托方法。
-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(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标签。
importUIKit @UIApplicationMain classAppDelegate:UIResponder,UIApplicationDelegate{ }
这个标签的作用就是将标注的类作为委托,创建一个UIApplication并启动整个程序。一般情况我们不需要对这个标签做任何修改,但如果我们想使用UIApplication的子类而不是它本身,我们就要自定义一个main.swift文件了(记得删除@UIApplicationMain标签)。这个文件我们不需要定义作用域,直接写代码就OK。
importUIKit classMyApplication:UIApplication{ overridefuncsendEvent(_event:UIEvent){ super.sendEvent(event) print("Eventsent:\(event)") } } UIApplicationMain( CommandLine.argc, UnsafeMutableRawPointer(CommandLine.unsafeArgv) .bindMemory( to:UnsafeMutablePointer.self, capacity:Int(CommandLine.argc)), NSStringFromClass(MyApplication.self), NSStringFromClass(AppDelegate.self) )
这样每次发送事件(点击按钮之类的)我们都可以监听到了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。