iOS 是由蘋果公司開發的移動操做系統 。蘋果公司最先於 2007 年 1 月 9 日的 Macworld 大會上公佈這個系統(最初叫 iPhone runs OS X)。該系統最初是設計給 iPhone 使用的(因此後來曾命名爲 iPhone OS),以後陸續套用到 iPod touch、iPad 以及 Apple TV 等產品上(因此在 WWDC 2010 上最終宣佈改名爲 iOS)。面試
做爲一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個個人iOS交流羣:812157648,無論你是小白仍是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 你們一塊兒交流學習成長!swift
2007-2020 每一年發佈一個新版本,最新版本 iOS 14(本教程基於 iOS 14)。數組
developer.apple.commarkdown
蘋果電腦:iMac 或者 MacBook 或 Mac mini 主機鏈接一個顯示器。網絡
還能夠在普通電腦上裝一個黑蘋果系統(不推薦),安裝複雜且不穩定。session
iOS 使用 Xcode 工具進行開發。能夠在 App Store 搜索安裝,也能夠去 Apple 開發者網站下載安裝(本教程基於 Xcode 12)。app
Swift 或者 Objective-C(本教程基於 Swift 5.x)。框架
我的 99 $/年函數
公司 99 $/年
企業 199 $/年

Core OS 是最爲核心的系統層,包括了內存管理,文件系統,硬件管理,電源管理,安全管理等內容。
Core Services 包含了多種核心服務提供給 App 使用,如網絡、線程、定位等。
Media 層主要包括了各類媒體文件的處理,經過它咱們能夠在應用程序中使用各類媒體文件,進行音頻與視頻的錄製,圖形的繪製,以及製做基礎的動畫效果。
Cocoa Touch 層爲應用程序開發提供了各類有用的框架,而且大部分與用戶界面有關,它負責用戶在 iOS 設備上的觸摸交互操做以及一些其餘的關鍵功能。


應用名
應用圖標

啓動屏 LaunchScreen

程序入口@main
(iOS 14 之前是 @UIApplicationMain)
didFinishLaunchingWithOptions
啓動方法
委託給SceneDelegate
window
生命週期
class SceneDelegate: UIResponder, UIWindowSceneDelegate {var window: UIWindow?func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {guard let _ = (scene as? UIWindowScene) else { return }}func sceneDidDisconnect(_ scene: UIScene) {}func sceneDidBecomeActive(_ scene: UIScene) {}func sceneWillResignActive(_ scene: UIScene) {}func sceneWillEnterForeground(_ scene: UIScene) {}func sceneDidEnterBackground(_ scene: UIScene) {}}
複製代碼
解析 Info.plist 得到Application Scene Manifest
,找到Main Storyboard file base name
設置的 Storyboard。
@main
AppDelegate —> SceneDelegate
顯示 Main.storyboard 中初始化的控制器。
容器概念
is Initial View Controller(箭頭移動)
Storyboard 中的界面與ViewController.swift
之間的聯繫(一個界面與一個類文件關聯)
刪除 Info.plist 中的Main Storyboard file base name
和Application Scene Manifest
最裏層的Storyboard Name
。
解析 Info.plist 發現沒有設置 Main Storyboard。
@main。
AppDelegate —> SceneDelegate
在 SceneDelegate 的willConnectToSession
中純代碼初始化 UIWindow,並設置顯示的第一個控制器。window —> rootViewController —> UIViewController —> UIView
。
iOS 開發中,一個界面就是一個 UIViewController(視圖控制器),界面上顯示的內容就是 UIView(視圖)。
UIViewController 中默認有一個和屏幕同樣大的 UIView,UIViewController 管理着它的生命週期。全部放在界面上的 UI 控件都放在 UIViewController 的 UIView 之上,在 UIViewController 的代碼中能夠經過self.view
屬性獲取它。開發中的其餘 UIView(及其子類)都放在該view
上。
viewDidLoad
:View 完成內存加載
viewWillAppear
:View 即將顯示
viewDidAppear
:View 徹底顯示
viewWillDisappear
:View 即將消失
viewDidDisappear
:View 完全消失


UIView 中能夠放其餘的 UIView
UIView 的層次關係(平級與包含)
backgroudColor:背景色
frame:相對父視圖的座標和大小
bounds:相對自身的座標和大小,因此 bounds 的 x 和 y 永遠爲0。
center:相對父視圖的中心點座標
alpha:透明度(0.0 ~ 1.0)
tag:標記(Int 類型,默認等於0),設置後,能夠經過所在容器View.viewWithTag
方法拿到這個視圖。
title:標題
superview:父視圖
subviews:全部子視圖
addSubview:添加視圖到父視圖
removeFromSuperview:將視圖從父視圖中移除(需提早講解觸摸方法)
viewWithTag:根據 tag 值獲取視圖
insertSubview:在指定視圖的上/下面插入視圖
bringSubviewToFront:把視圖移到最頂層
exchangeSubviewAtIndex:將2個位置的視圖互換
Storyboard
注意左側面板的視圖層次結構
屬性面板的重要屬性介紹
純代碼
注意代碼的書寫位置,每每有人因爲書寫的位置不對致使代碼報錯。
如何在代碼中獲取 Storyboard 中的自定義 UIView?目前有兩種方式:
經過 tag 屬性:一旦視圖多了,或者忘了設置 tag,亦或者設置了相同的 tag,都會出現問題。
經過 subviews 屬性:一旦視圖多了很難經過數組準確獲取某個 View。
那麼有沒有更加友好、更加直觀、更加便捷、更加高效的方法呢?答案是確定的,那就是 @IBOutlet 與 @IBAction。
寫於類中的屬性。
與 Storyboard 中的 UIView 創建聯繫。
此時的屬性就表明 Storyboard 中的 UIView
全部的 UI 控件均可以拖拽 @IBOutlet。
寫於類中的方法。
與 Storyboard 中的 UIView 產生的事件創建聯繫。
當相應的事件發生時,方法就會被調用。
只有繼承自 UIControl 的 UI 控件能夠拖拽 @IBAction。
順向拖拽連線:經過 Storyboard 向類文件拖拽連線。
反向拖拽連線:經過類文件向 Storyboard 拖拽連線。
Storyboard 中的 UIViewController 與 想拖拽的類進行了關聯。
UIView 連線後刪除了類中的 @IBOutlet 或者 @IBAction。
UIView 連線後改變類中的 @IBOutlet 或者 @IBAction 名字。
錯誤信息
@IBAction:
unrecognized selector sent to instance
@IBOutlet:
this class is not key value coding-compliant for the key XXX
原文做者:琉璃紗
原文地址:0x9.me/Z7dh6