iOS章结 - 知道\50
1 - iOS是 Apple 公司的移动操作系统,主要用于 iPhone、iPad、iPad Mini、iPod Touch 等移动产品
2 - iOS 系统为每个程序分配 30MB 的内存,超过 20MB 会收到内存警告,超过 30MB 系统将终止应用程序,就是我们熟悉的闪退
3 - iOS 常见的功能
① 支持媒体播放
② 支持网络连接
③ 支持如 window 和 view 这样的接口使用
④ 支持多触摸事件
⑤ 支持手机拍照、摄像
⑥ 支持访问用户数据,如相片、联系人信息
⑦ 支持 SQLite 数据
等等
4 - iOS系统架构:iOS 是基于 Mac OSX 同样的内核,iOS APP 由 OS 技术层次支撑起来
① Core OS 和 Core Service层提供了底层支持,包括文件访问、网络协议、低级数据类型等。它们是 C 基础的接口,包括 Core Foundation、CFnetwork、SQLite 等 API
② Media 层提供了一些基本的绘图、声音和视频的技术支持,包括基于 C 的 OpenGL ES、Quartz、Core Audio、Core Animation 等
③ Cocoa Touch 层包括了大部分使用 OC 的 API,主要 Foundation 和 UIkit 两个框架构成。Foundation 提供了面向对象方式的文件访问、网络操作、数据/集合类型等。在进行 iPhone APP 开发时,应当从上而下地使用这些技术层。Cocoa Touch 层已经问你提供了基本的系统行为支持。当你想要实现更复杂的行为和界面时,才考虑向下层寻求技术支持
5 - storyboard 不止是包含一个视图控件,而是所有视图控件以及它们之间的联系。storyboard 通常用于编写 Demo,真正项目开发中纯代码比较多见
6 - 在编译 APP 时Xcode 将它整理成一个包,APP 包里主要包括了 APP 可执行的文件和 APP 所需要的资源文件等,如下
① MyApp:可执行的文件
② lcon.png:APP图标
③ MainWidow.nib:主窗口 xib 文件
④ Default.png:加载时的图片
⑤ iTunesArtwork:iTunes 图片
⑥ Info.pist:配置文件
⑦ Resource files:资源文件
7 - iPhone 系统中,应用程序的执行(进程)由至少一个线程组成(主线程,程序运行后生成已执行 main 函数)
8 - 内存警告的处理流程
① APP 收到系统发过来的 memory warning 的通知
② APP 释放占用较大的内存
③ 系统回收此 APP 所创建的 autorelease 的对象
④ APP 返回到已经打开的页面时,系统重新调用 viewDidLoad 方法,view 重新加载页面数据进行重新显示
9 - iOS 图片的展示,比如对于一个100 * 100的 imageView,美工通常需要切 3 套图
① 100 * 100 命名 xxx.png
② 200 * 200 命名 xxx@2x.png
③ 300 * 300 命名 xxx@3x.png
10 - GCD(Grand Central Dispatch)是苹果开发的一个多核编程的较新的解决方法,在 Mac OS X 10.6 雪豹中首次推出,并且引入到了 iOS 4.0 中,它是一个代替诸如 NSThread 等技术的超强大技术,完全可以处理如数据锁定和资源泄露等复杂的异步编程问题
11 - socket连接 | http连接
① 简单来说,我们所浏览的网页(以 http://)开头,它都是 http协议传输到自己的浏览器中的,而 http 是基于 socket 之上的。socket 是一套完整的 TCP/UDP协议的接口
② socket 是对 TCP/IP协议的封装,它本身并不是协议,而是一个调用接口,通过 socket,我们才能使用 TCP/IP协议
socket连接就是所谓的长连接,理论上讲客户端和服务器端一旦建立就不会断掉,但是由于各种环境因素可能会连接断开,所以当一个 socket连接中没有数据传输,那么为了维持连接需要发送心跳消息(具体心跳消息格式是开发者自己定义)
③ http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端相应后连接即会断掉。它是简单的对象访问协议,对应于应用层,它基于 TCP 连接的(TCP协议:对应于传输层 IP协议:对应于网络层);TCP/IP 是传输层协议,主要解决数据如何在网络中传输;而 http 是应用层协议,主要解决如何包装数据
12 - 什么是 socket
① socket 起源于 Unix,而 Unix/Linux 基本哲学之一就是「一切皆文件」,都可以用「打开Open --> 读写write/read --> 关闭close」模式操作,可以理解为 socket 就是该模式中的一个实现
② socket 是一个针对 TCP/UDP 编程的接口,可以利用它建立 TCP 连接等。TCP/UDP 协议属于传输层,而 http 协议属于应用层,但它实际上也建立在 TCP 协议之上,可以一个简单比方:http 是一辆轿车,提供并封装了显示数据的具体形式。而 socket 就是发动机,提供了网络通信的能力
③ socket 本身并不是协议,而是一个调用接口。它的出现,只是使得程序员更为方便快捷地使用 TCP/IP 协议而已
13 - TCP连接的 三次握手
① 第一次握手:客户端发送 syn包(syn = j)到服务器,并且进入 SYN_SEND 状态,等待服务器的确认
② 第二次握手:服务器收到 syn 包,且必须确认客户的 SYN(ack = j + 1),同时自己也发送一个 syn 包(syn = k),即 SYN + ACK 包,此时服务器进入 SYN_RECV 状态
③ 第三次握手:客户端接受到服务器的 SYN + ACK 包,向服务器发送确认包 ACK(ack = k + 1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态
注:握手过程中是不传递数据的,当三次握手完毕之后,客户端与服务器之间才进行数据传递
断开连接时服务器和客户端均可以主动发次断开 TCP 连接的请求,断开连接过程需要四次握手
14 - socket 建立网络连接的步骤:建立 socket 连接只要需要一对儿套接字,其中一个运行在客户端(ClientSocket),另一个运行在服务器端(ServerSocket),连接如下
① 服务器监听:服务器端的套接字并不定位具体的客户端套接字,而是处理等待连接的状态,实时监控网络状态,等待客户端的连接请求
② 客户端请求:客户端的套接字提出连接请求,指出服务器端套接字的地址和端口号,然后就像服务器端套接字发送请求
③ 连接确认:当服务器端套接字监听到或者说是接收到客户端套接字发送的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发送给客户端,一旦客户端确认此描述,双方便正式建立了连接。此时,服务器端套接字继续处于监听状态,继续接受其他客户端套接字的连接请求
15 - HTTP 协议
① HTTP 是一个属于应用层的面向对象的协议,适用于分布式超媒体信息系统
② HTTP 是一个基于请求与响应模式的、无状态的、应用层的协议,常基于 TCP 的连接方式
③ 特点
支持客户端/服务器模式
简单快速 :客户端向服务器发送请求时,只需要发送请求方法和路径即可
灵活:HTTP 允许传输任意类型的数据对象,正在传输的类型由 Content-Type 加以标记
无连接:限制每次连接只处理一个请求,服务器处理完客户端的请求并收到客户端的应答后,即断开连接
无状态:HTTP 是个无状态协议,意味着它对事务处理没有记忆功能
16 - TCP/UDP协议
① TCP 即传输控制协议,提供的是面向连接的、可靠的字节流服务:当客户端可服务器端经 三次握手 后才能传递数据。TCP 提供了超时重发、丢弃重复数据、检验数据、流量控制等功能,保证数据能够从一端传向另一端
② UDP,即用户数据报协议,是一个简单的面向数据报的运输层协议。它不提供可靠性的数据,只是把应用程序给 IPhone 层的数据报发送出去,但是并不保证它们能够到达目的地。由于 UDP 在传输数据报前不用在客户和服务器之间建立一个连接且没有超时重发等机制,所以传输速度超快
③ 两者差别
是否是面向连接的(是否在数据传递前建立连接)
传递数据的可靠性和非可靠性
应用场合:当传输海量数据或少量的数据时选择
17 - 如果 UIWindow 是从 nib 文件中加载得到的,Interface Builder 是不允许创建比屏幕尺寸小的窗口
18 - UIView 动画块可以嵌套,但是在最外层的动画块提交之前,被嵌套的动画是不会被执行的
19 - UIkit 是在一个独立的、和应用程序的主事件循环分离的线程中执行动画:commitAnimations 方法将动画发送到该线程,然后动画就进入线程中的队列,直到被执行。若有多个动画需要运行,则默认顺序执行。如果某个动画将 setAnimationBeginsFromCurrentState: 类方法传入 YES 来重载这个行为,则该动画立即执行 ,那么造成的问题就是阻塞当前正在运行的动画
20 - 视图的 drawRect: 方法,常常借助坐标系统的变换来进行描画
21 - 利用 UIView 的 transform 属性,可以实现对整个视图的各种类型的平移、比例缩放、变焦缩放视觉效果,属性值缺省为恒等变换
22 - 视图交互模型:用户触击屏幕到系统更新屏幕这一过程中的基本事件序列是如何工作
① 用户触击屏幕
② 硬件捕捉触击事件并且报告给 UIkit 框架
③ UIkit 框架将触击信息封装成一个 UIevent 对象,并且发送给恰当的视图
④ 视图开始处理事件:响应事件有以下几种情况
调整视图或子视图的属性变量。如边框、边界、透明度等
视图或子视图标识为需要修改布局或重画。如果视图被标识为需要重新布局,UIkit 就调用视图的 layoutSubviews 方法;如果视图的任何部分被标识为需要重画,UIkit 就会调视图的 drawRect: 方法。UIkit 只对那些需要重画的视图调用这个方法。在这个方法中,所用视图都应该尽可能快地重画指定区域且都应该只重画自己的内容,不应该去描画子视图的内容。同样地,在这个调用点上,视图不应该尝试改变其属性或布局
将数据发生的变化通知给控制器
⑤ 所有更新后的视图和其它可视内容进行合成,之后发送给图形硬件进行显示
⑥ 图形硬件将渲染完成的内容转移到屏幕,进行显示
23 - UI 控件大致分为以下几类:显示类控件、表格类控件、输入类控件、搜索类控件、提示类控件、选择类控件、点击类控件、滑动类控件、视图控制器类.....
24 - UI设计原则
① 显示面积:尽可能少而紧凑的界面元素,足够大的交互控件
② 文件大小:需考虑有限的存储空间,下载时间以及速度,流量的费用
③ 内存空间:程序运行空间尽可能小化、内存优化,避免过高质量的音频和视频
④ 程序运行限制:一次只有一个前台程序,程序退出时间不得超过5秒
⑤ 数据访问:不能使用别的 APP 中的静态类库,不能访问沙盒以外的任何文件且不能把沙盒文件共享出去
可以通过特定的 API 访问一些系统资源,如图片库、地址簿等
⑥ 能量消耗:CPU 负载,发热、电池消耗快,算法优化
⑦ 用户习惯:快速启动、短暂使用;随时可能退出,避免多余的帮助;自动保存
25 - 在 Mac OS X 中,UIwindow 父类是 NSResponder;在 iPhone OS 中,UIwindow 父类是 UIView
26 - drawRect 和 layoutSubviews 的区别
① 两者都是异步执行
② layoutSubviews 方便数据计算,是对 subviews 重新布局,它的调用方法优先于 drawRect;而 drawRect 方便视图重绘
27 - iOS 线程有三种主要的方法:NSThread、NSOperation、GCD
28 - 锁是线程编程同步工具的基础:POSIX 互斥锁、NSLock、@synchronized 指令等
29 - 方法(平常所说的函数,是错误的,只是习惯这么叫)是 OC 的核心,在 OC 中使用消息发送机制。我们平常说的,如对「student 对象调用了 sayHi 这一方法」表述是不正确的,应该是「给 student 对象发送 sayHi 消息」
30 - 类的内部是指:类的 @implementation 和 @end 之间
31 - 创建对象分为两个步骤
① 开辟空间:根据类中声明的实例变量为对象分配内存
② 初始化:将所有实例变量置为默认值 0,并返回首地址
32 - 初始化的主要作用:给实例变量赋初值。初始化方法在对象的整个生命周期里只是用一次
33 - 函数(注意和方法的区分)中,不可以通过成员变量名访问某个对象的成员变量、属性不可以、self 同样也不能使用
34 - Foundation 框架是 Cocoa 编程、iOS 编程的基础框架,包括:字符串、集合、日期、时间等基础类
35 - C 中,字符串是由 char(ASCII码)字符组成;OC 中,字符串是由 unichar(Unicode)字符组成
36 - 不可变字符串的修改操作,本质就是得到一个新的字符串;可变字符串的修改方法没有返回值,修改的是原字符串
37 - Block 块语法,本质上是匿名函数。C++、JS、Swift 等语言都有类似语法,叫做闭包
38 - 字面量(笑笑语法)创建的对象是便利构造的,且是不可变的
39 - Extension 的主要作用是管理类的私有方法,它针对的是自身的类,必须有源代码的类
40 - Protocol 的核心使用场景是实现 delegate 设计模式
41 - ARC 是基于 MRC 的,前者本质上就是后者,只是编译器帮程序员添加了默认的释放代码
42 - dealloc 是 NSObject 的一个实例方法,与 alloc 对应,用于回收开辟的内存空间,这个方法在对象引用计数为 0 时,由系统自动调,通常我们在 dealloc 中释放类的实例变量
43 - 使用 dealloc 的注意点
① ARC 模式下,永远不要手动调用 dealloc
② MRC 模式下,在 dealloc 方法的最后一行,必须要写 [super dealloc]
44 - 20 世纪 80 年代早期,OC 出现(由 Brad Cox 发明),意在将 C 语言和 Smalltalk 语言结合在一起;1985 年 Steve Jobs 成立 NeXT 公司,以 Unix 为操作系统创建了 NextSTEP(使用 OC 开发的用户界面工具包);1996 年,NextSTEP 被重命名为 Cocoa
45 - Objective-C 通常写作 ObjC 或 Obj-C 或 Objective C,是扩充 C 的面向对象的一门语言,主要应用于 Mac OS X 和 GUNstep 这两个使用 OpenStep 标准的系统
46 - Objective-C 是 C 的母集合,就是说任何原始的 C 程式都可以通过 Objective-C 编译器且不需修改,同样允许 Objective-C 使用任何原始的 C 代码
47 - selector 是一个方法的名字;method 是一个组合体,包含了名字和实现
48 - 面向对象的三大特征:封装、继承、多态
49 - 类是一种事物的抽象,必须将它具体化才能够使用。而创建一个类的对象,实际上需要做三件事
① 对对象的声明
② 对对象进行内存空间的分配
③ 对对象进行初始化
50 - 凡是遵守 UITableViewDataSource 协议的 OC 对象,都可以是 UITableView 的数据源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)