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