Skip to content

Latest commit

 

History

History
131 lines (87 loc) · 6.85 KB

1.基础简介.md

File metadata and controls

131 lines (87 loc) · 6.85 KB

1.基础简介

因为对OC的排斥以及接受不了[]的用法,所以我在经历了一段时间的磨练后,依然决定从Swift开始。后面的部分都是用swift语言学习的。

使用swift新建一个ios工程,可以看到Swift将OC中的h和m文件合并成了一个文件。 工程里面主要创建了几个文件,其实这几个文件在之前学OC的时候也简单知道了一些,但是在这里要系统的学习Swift了,所以还是要仔细再看看。

iOS其实和其他语言(Java、C)一样,也是通过一个main()函数作为入口,main()函数封装在了UIApplication里面,系统会自动调用,这就是iOS应用程序的启动入口。

在启动过程中,UIApplication会扫描Info.plist,找到需要加载的入口storyboard。如Main.storyboard,读取里面的UIViewController,然后就能显示相应的界面,响应相应的事件,执行代码,处理各种功能。

iOS启动流程及事件触发如图:

UIApplicationMain()函数调用创建一个UIApplication对象及程序代理对象(通常为:AppDelegate),UIApplication对象扫描Info.plist文件,将其中Main storyboard file base name所指定的Storyboard文件装入(通常为:Main.storyboard).UIApplication对象从程序代理对象AppDelegate中获取窗口对象UIWindow,也可以创建一个UIWindow新实例并将其与程序代理对象相关联。将Storyboard文件中Initial View Controller属性所指定的UIViewController实例化,并将它赋予为UIWindow的root ViewController

最后向程序代理对象AppDelegate发送完成启动消息,以便程序员做自己的初始化工作。

AppDelegate.swift

// 导入iOS中所有控件的库文件UIKit.当我们导入了UIKit(用户界面工具,User Interface Kit)框架后,该Swift文件就包含了所有与用户界面、视图、视图控制器相关的类和函数API。
import UIKit

// 调用了OC中的UIApplicationMain函数,它是iOS应用程序的入口,它会创建了一个UIApplication对象,
// 代表当前应用程序.作用是用来检测当前应用程序状态的改变,还会创建一个遵守UIApplicationDelegate的协议的子类对象作为UIApplication的代理,
// 作用是处理应用程序状态的改变(创建AppDelegate对象并且设置为UIApplication对象的代理)
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    // 类似Android中的PhoneWindow窗口
    var window: UIWindow?

    // 应用程序启动成功后,会自动调用到该方法
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        // 在这个方法中搭建应用程序界面、获取数据然后再展现,如果不在该方法中创建window,
        //那么程序会通过Main.storyboard去创建应用程序界面
        return true
    }
    // 将要变成非活跃状态时的回调(不可见),理解成Android中activity的生命周期
    func applicationWillResignActive(_ application: UIApplication) {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
    }
    // 后台时调用
    func applicationDidEnterBackground(_ application: UIApplication) {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }
    // 进入前台时
    func applicationWillEnterForeground(_ application: UIApplication) {
        // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
    }
    // 变成活跃状态
    func applicationDidBecomeActive(_ application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }
    // 应用程序将要终止
    func applicationWillTerminate(_ application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }
}

ViewController.swift

一看名字就知道是Android中的MVC模式

import UIKit

class ViewController: UIViewController {
    // 程序加载完成后的逻辑处理
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }


}

Main.storyboard

类似Android中的xml文件等,可以写布局

Assets.xcassets

放图片等资源

LaunchScreen.storyboard

启动页面

Outlet和Action

在iOS的开发中,有两个重要的概念:Outlet和Action,它们可以很简单地把程序代码和界面组件、事件触发等连接起来。

  • Outlet

    是一种特别定义的变量。通过Outlet,可以从与Outlet命名对应的控件中取出信息,或者将新的信息赋予控件。在Main.storyboard界面上配置的每个控件,都可以通过Outlet与代码连接,从而让程序员可以在程序中存取Outlet中的内容。在这里,Outlet是将界面组件和代码变量连接的一种纽带,实现了界面组件与代码间的信息交换

  • Action

    是一种特别定义的函数,是将触摸、晃动等行为事件与函数功能相连接。当相应的事件发生时,Action所对应的函数内的代码将被自动执行。所以,IBOutlet和IBAction都只是一个标记,IBOutlet用来标记代码片段中的变量,这个变量是应该和界面中某个对象相关联的;IBAction应该用来标记代码片段中的方法(函数),这个方法是应该和界面中的某个对象相关联的,用来响应对象应该响应的操作。

  • 下一篇:2.UI基础之UIView简介