目录结构

目录结构
目录结构

项目里没有什么内容

项目结构
项目结构

从上到下依次是

AppDelegate:

APP启动时基本上每一次的状态改变都会调用一些delegate中的方法来响应当前的状态,让我们可以对程序进行特定操作。

willFinishLaunching

willFinishLaunching:程序将要完成启动。只在程序启动时执行一次。launchOptions:存存储程序启动的原因。

  • (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    return YES;
    }

    didFinishLaunching

    didFinishLaunching:程序已经完成启动,将要显示界面了。只在程序启动时执行一次。launchOptions:存存储程序启动的原因。

didFinishLaunching是在app显示界面给用户之前最后执行的状态,理所当然我们可以在这个方法内完成一些基本的初始化,但是应该是轻量级的初始化操作,不然会导致程序启动时间长,影响用户体验。

举一些栗子:

不使用StoryBoard,需要配置window
第三方登录sdk注册,以及很多第三方sdk的初始化配置
判断程序接下来的业务逻辑,播不播放引导图片?播不播放开屏广告?有没有登录?
但项目复杂了之后,需要配置的东西越来越多,所以didFinishLaunching非常容易耦合,这是我们应该要注意的。

  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //若用户直接启动,launchOptions内无数据。

    //若由其他程序通过openURL:启动。
    //launchOptions中UIApplicationLaunchOptionsURLKey的数据为openURL:的参数url。
    //launchOptions中UIApplicationLaunchOptionsSourceApplicationKey的数据为启动本程序的源程序的bundle ID(NSString)。
    NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
    if (url) {

    [self launchOptionsWithURL:url];

    }

    NSString *bundleId = [launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey];
    if (bundleId) {

    [self launchOptionsWithBundleId:bundleId];

    }

    //若由远程通知启动。
    //launchOptions中UIApplicationLaunchOptionsRemoteNotificationKey对应数据为启动本程序的远程通知信息useinfo(NSDictionary)。
    NSDictionary *useinfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (useinfo) {

    [self launchOptionsWithUseinfo:useinfo];

    }

    return YES;
    }

    DidBecomeActive

    DidBecomeActive:程序已激活。程序在处于前台时调用:程序第一次启动时、从后台返回前台时。

若程序之前在后台,可以在这方法内重新拉取数据,刷新用户界面。

  • (void)applicationDidBecomeActive:(UIApplication *)application;
    WillResignActive
    WillResignActive:程序将要进入未激活。程序在处于前台时调用:有电话打进来、手机锁屏等。程序被其他任务强制占用了,就会调用这个方法,所以这个方法也称为程序中断调用方法。

实际运用场景为:

对音频、视频、游戏的暂停操作
暂停定时器
减少OpenGL ES帧率
暂停正在执行的任务,若有下载任务可以取消或暂停。

  • (void)applicationWillResignActive:(UIApplication *)application {

}

DidEnterBackground

DidEnterBackground:程序已经进入后台。程序从前台进入后台时调用。

作用是:

释放共享资源
保存用户数据(写到硬盘)
作废计时器
保存足够的程序状态以便下次恢复

  • (void)applicationDidEnterBackground:(UIApplication *)application {

}
2.6 WillEnterForeground
WillEnterForeground:程序将要进入前台。程序从后台进入前台时调用。

WillEnterForeground主要用于撤销WillResignActive中做的操作。

  • (void)applicationWillEnterForeground:(UIApplication *)application {

}

WillTerminate​​​​​​​

WillTerminate:程序将要终止。程序终止之前调用。

目的就是为了保留一些重要的数据,方便下次启动后的恢复,达到一种让用户感觉该程序永远运行在后台从来没被终止过的感觉。

  • (void)applicationWillTerminate:(UIApplication *)application {

    [self saveContext];

原文链接:https://blog.csdn.net/qq_36557133/article/details/86770301

Assets.xcassets

Assets.xcassets是用来存放图像资源文件的。将一个图片放在Assets里面是这个样子的

{% image http://res.zhangyongfa888.site/1590384969071l5a56ook.png?imageslim 'back' '' %}

当然还能放一些自定义的颜色
使用方法:

{% image http://res.zhangyongfa888.site/1590385230758e1imim8a.png?imageslim '颜色使用' '' %}

LaunchScreen.storyboard

Launch screen interface file base name 这里只放了一个label

使用 Xcode storyboard(故事板) 来提供 app 的启动屏幕”的要求已延期到2020.6.30.

main.m 主函数

int main(int argc, char * argv[]) {
    NSString * appDelegateClassName;
        @autoreleasepool {
    // Setup code that might create autoreleased objects goes here.
    appDelegateClassName = NSStringFromClass([AppDelegate class]);
}

    return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}

main.storyboard (已删除)

删除方法:https://www.jianshu.com/p/12faf6fd7388

PrefixHeader.pch(手动创建)

创建方法:https://blog.csdn.net/lxmy2012/article/details/53976228
PrefixHeader.pch 是一个预编译的文件,可以被项目中的其它文件访问到,一般用来存放常用的宏、常用的头文件、配置日期等。

study0518-Bridging-Header.h

Use this file to import your target’s public headers that you would like to expose to Swift.

swift混编的桥接头文件

pod

podfile是一个规范文件,描述一个或多个项目目标依赖项,CocoaPods管理iOS组件库.
https://www.jianshu.com/p/dfaf0954b76d

项目中只依赖了SnapKit(swift)https://www.jianshu.com/p/332b816cd3e4