swift中的@UIApplicationMain示例详解

 更新时间:2017年12月28日 10:00:02   作者:Inlight先森  
这篇文章主要给大家介绍了关于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 中如何使用 Option Pattern 改善可选项的 API 设计

    Swift 中如何使用 Option Pattern 改善可选项的 API 设计

    这篇文章主要介绍了Swift 中如何使用 Option Pattern 改善可选项的 API 设计,帮助大家更好的进行ios开发,感兴趣的朋友可以了解下
    2020-10-10
  • 初探Swift3.0带来的变化汇总

    初探Swift3.0带来的变化汇总

    这个周末抽空看了下swift3.0的变化,今天小编通过本教程给大家分享Swift3.0带来的变化,非常不错,感兴趣的朋友参考下吧
    2016-12-12
  • swift中正确安全声明一个单例的方法实例

    swift中正确安全声明一个单例的方法实例

    这篇文章主要给大家介绍了关于swift中如何正确安全声明一个单例的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Swift利用纯代码实现时钟效果实例代码

    Swift利用纯代码实现时钟效果实例代码

    这篇文章主要给大家介绍了关于Swift利用纯代码实现时钟效果的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用swift具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • OpenStack的Swift组件详解

    OpenStack的Swift组件详解

    这篇文章主要介绍了OpenStack的Swift组件,对swift感兴趣的同学,可以参考下
    2021-04-04
  • Swift 重构重载运算符示例解析

    Swift 重构重载运算符示例解析

    这篇文章主要为大家介绍了Swift 重构重载运算符示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Swift编程中数组的使用方法指南

    Swift编程中数组的使用方法指南

    这篇文章主要介绍了Swift编程中数组的使用方法指南,是Swift入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • iOS中Swift指触即开集成Touch ID指纹识别功能的方法

    iOS中Swift指触即开集成Touch ID指纹识别功能的方法

    随着移动支付时代的到来,Touch ID 指纹验证迅速被支付宝,微信钱包普及,相信各位朋友使用后也大呼方便。下面给大家分享iOS中Swift指触即开集成Touch ID指纹识别功能的方法,一起看看吧
    2017-03-03
  • RxSwift学习教程之基础篇

    RxSwift学习教程之基础篇

    RxSwift是Swift函数响应式编程的一个开源库,由Github的ReactiveX组织开发,维护。下面这篇文章主要给大家介绍了关于RxSwift学习之基础篇的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • Swift中排序算法的简单取舍详解

    Swift中排序算法的简单取舍详解

    对于排序算法, 通常简单的, 为大家所熟知的有, 选择排序, 冒泡排序, 快速排序, 当然还有哈希, 桶排序之类的, 本文仅比较最为常见的选择, 冒泡和快排,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2018-03-03

最新评论