iOS 学习笔记
一:知识点
1.iOS 有哪几种开发方式
1: 原生开发(Native) 如:oc
2: 混编开发(Hybird) 如:oc+H5
3. web开发 如:H5+JS+CSS
a: webAPP开发框架:1》React Native / Cordova (PhoneGap)(Cordova是PhoneGap被捐给apache之后用的项目名)
2》Weex:是一个动态化的高扩展跨平台解决方案,能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出Native级别的性能体验,并支持iOS、安卓、YunOS及Web等多端部署。
b: 关于CodePush
CodePush是提供给React Native 和 Cordova 开发者直接部署移动应用更新给用户设备的云服务。(可以进行热更新)
c: webApp开发云服务商:APICloud
d: 关于JNI
1》 JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++).
2》 目的是使java方法中能够调用c实现的一些函数 详见
2.关于GUI开发
1. 什么是GUI开发
GUI开发即 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面
2. iOS中怎么进行GUI开发
纯代码 和 IB(Interface Builder) 都可以生成 GUI;IB使用Nib文件储存GUI资源
3.关于敏捷开发(Scrum)
1. 什么是敏捷开发
以用户的需求进化为核心,采用迭代、循序渐进的方法进行的软件开发
2. 如何进行敏捷开发
3. 敏捷开发管理工具
鱼骨:http://www.yugusoft.com/fishim/lean_board/index.htm?key_word=_Scrum_&promotion=_bokeyuan_
4.关于并行开发
参考自:http://www.cocoachina.com/ios/20160201/15179.html
1. 为何需要并行开发
充分利用iOS设备的硬件;获得更好的用户体验
2. 关于GCD(伟大的中枢调度)
GCD是最常用的管理并行代码和执行异步操作的Unix系统层的API。GCD构造和管理队列(队列是按先进先出(FIFO)管理对象的数据结构。)中的任务。
2.1 调度队列
(1)串行队列: a: 只有一个线程,加入到队列中的操作按添加顺序依次执行。 优点:1.保证序列化访问共享资源,避免竞态条件票;2.任务的执行顺序是可预测的;3.可以创建任意数量的串行队列。
b:当使用串行队列时,你必须创建一个新队列,否则会在应用试图执行更新UI的任务的时候执行你的任务。这将导致错误和延迟,破坏用户体验(创建队列:dispatch_queue_create)
(2)并行队列: a:有多个线程,操作进来之后它会将这些队列安排在可用的处理器上,同时保证先进来的任务优先处理。
b:并行队列保证任务开始的顺序,但你不知道执行的顺序
3. 操作队列
(1)特点:
不遵循先进先出;默认情况下,它们同时操作;操作队列是类NSOperationQueue的实例,其任务封装在NSOperation的实例里
(2)NSOperation 子类
NSBlockOperation / NSInvocationOperation
5. iOS应用的兼容性与稳定性测试
云平台:兼容性测试:TestBird ,UIAutomation( xcode8中移除了UIAutomation)
稳定性测试:CrashMonkey4IOS http://www.jianshu.com/p/b6d6728052dd
友盟的错误统计分析
calabash 自动化测试 http://www.jianshu.com/p/38e762bae011
6.关于CocoaPods
1. 什么是CocoaPods
CocoaPods是一个负责管理iOS项目中第三方开源库的工具
2. 有什么作用
解决库与库之间的依赖关系;自动化的,集中的管理项目中的第三方库
3. 如何安装以及使用
环境搭建部分详见:http://blog.csdn.net/prl18353364833/article/details/52460124
创建部分:
先 cd 到项目根目录
a:创建配置文件
touch Podfile --》vim Podfile
b: 往配置文件中添加第三方库
输入i 进入编辑模式
target ‘项目名称’ do
pod 'AFNetworking', '~> 2.6' (版本号省略则为最新版) (pod多个库不需要用逗号)
end
添加完之后按esc 退出,再输入:(冒号) 再在冒号旁边输入wq ,回车。
输入pod install 进行安装。
c: 编辑库
open -e Podfile 编辑完之后保存 在终端输入pod update
d: 查看某库的信息(版本)pod search AFNetworking
4. 其他问题
(1) 更新某个库至某个版本号 -> pod update
(2) pod search XX 搜索某个库检查不到最新版本 -> pod repo update ; (此时如果报错: cocoapods was not able to update the 'master' repo.if it is a unexpected issue and persists you can inspect it running 'pod repo update --verbose' ; 先执行pod repo update --verbose; 再 pod search XX,如果搜索到了该版本号, 直接 pod update )
7. 关于库。
见: http://www.cnblogs.com/Cyan-zoey/p/7283412.html
8. 关于数据持久化
见: http://www.cnblogs.com/Cyan-zoey/p/7283456.html
9. 函数式编程,链式编程,响应式编程
1. 函数式编程: Functional Programming 简称:FP
a:编程思想是把操作尽量写成一系列嵌套的函数或者方法调用。
b:代表作:Masonry
2. 链式编程:
a:编程思想是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。
b:代表作:Masonry
3. 响应式编程:
a: 响应式编程是一种面向数据流和变化传播的编程范式,数据更新是相关联的。
b:代表作:ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾
10. 关于加密
1. base64 : 一种unicode到asci码的映射,加密后产生的字节位数是8的倍数,如果不够位数以=号填充
2. MD5(message-digest algorithm 5)加密 : 摘要算法,加密过程不可逆。加密速度快,单独使用由于撞库原因安全性较低
3. AES(钥匙串):-对称密码算法,密钥长度分为128、192和256三种,长度越长,安全性越高
4. RSA:非对称加密,常被用于加密数据传输.如果配合上数字摘要算法(MD5), 也可以用于文件签名.
原理:使用"秘匙对"对数据进行加密解密.;公钥(public key): 用于加密数据,放在ios客户端;私钥(private key): 用于解密数据
11.关于VPN
1. VPN 即:Virtual Private Network ,虚拟专用网络,属于远程访问技术(功能:在公用网络上建立专用网络,进行加密通讯)
2. Network Extension(ios8+),该框架提供了配置和控制VPN支持,以及wifi热点相关的接口(wifi列表,信号强 度,WiFi名称等)。
申请地址: https://developer.apple.com//contact/network-extension/
详见:http://blog.csdn.net/i374711088/article/details/51655526
12. 蓝牙开发
1. 关于BLE
(1) BLE是什么
BLE:即Bluetooth Low Energy ,蓝牙低能耗
(2)传统蓝牙与BLE 有何区别?
a》BLE比起传统蓝牙最大优势就是低功耗;
b》传统蓝牙,用ExternalAccessory框架开发。硬件需要MFi认证
BLE(蓝牙4.0),用CoreBluetooth框架进行开发。
2. 关于ANCS
(1)ANCS:Apple Notification Center Service,苹果通知中心服务。是苹果让周边蓝牙设备(手环、手表等)可以通过低功耗蓝牙访问IOS设备(iphone、ipad等)上的各类通知提供的一种简单方便的机制。
(2)ANCS协议分析
13. DRM开发
1. 什么是DRM
DRM:英文全称Digital Rights Management, 数字版权管理
2. DRM开发的目的
保护数字媒体的版权,从技术上防止数字媒体的非法复制,或者在一定程度上使复制很困难,最终用户必须得到授权后才能使用数字媒体
3. 分类
1》 一类是多媒体保护,例如加密电影、音乐、音视频、流媒体文件。
2》另外一类是加密文档,例如Word, Excel,PDF等。
14. json解析
ios 自带类NSJSONSerialization
序列化:从对象到二进制数据的过程我们一般称为对象的序列化(Serialization),也称为归档(Archive)(对对象进行归档需要实现NSCoding以及NSCopying(非必须)协议)
反序列化:二进制数据到对象的过程一般称为反序列化或者反归档
15. ios中的缓存机制 详见
1. 缓存分类
(1) 按需缓存 (缓存请求应答,工作原理同Web浏览器)
工作原理: 按需缓存是指把从服务器获取的内容以某种格式存放在本地文件系统(NSCachesDirectory),之后对于每次请求,检查缓存中是否存在这块数据,只有当数据不存在(或者过期)的情况下才从服务器获取
(2) 预缓存 (缓存全部内容(或者最近n条记录)以便离线访问)
a: 工作原理: 而预缓存是把内容放在本地以备将来访问 如: Core Data
b: 注意事项: 实现预缓存时必须定期删除不再需要的(过时的)数据,否则缓存会不断增长并影响应用的性能
如何选择哪种缓存:
2. 缓存技术
URL缓存(NSURLCache)、数据模型缓存(利用NSKeyedArchiver)和Core Data (前两种是按需缓存,后者预缓存)
3. 如何选择
是否需要在下载数据之后处理数据;如果一个应用需要做数据的修改或者更新下载,就必须实现预缓存
16. TTS开发 详见
1. TTS是Text To Speech的缩写,即“从文本到语音” ,是语音合成(SpeechSynthesis)应用的一种
2. ios平台下的语音合成:(在线/离线)科大讯飞语音 / 系统自带
使用系统自带的AVSpeechSynthesizer
#import<AVFoundation/AVFoundation.h>
AVSpeechSynthesizer * synthsizer = [[AVSpeechSynthesizer alloc] init];
AVSpeechUtterance * utterance = [[AVSpeechUtterance alloc] initWithString:@“你好,北京…"];//
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN”];//要转化的语言 (en-US 英语)
utterance.rate = 0.4f;//声速
[synthsizer speakUtterance:utterance];
17. http/ tcp/udp/scoket 的区别 详情请见
http: 基于TCP连接的,是应用层协议,主要解决如何包装数据 ;短连接
tcp: 传输控制层协议,为面向连接、可靠的、点到点的通信; 侧重可靠传输
udp: 用户数据报协议,非连接的不可靠的点到多点的通信; 侧重快速传输。
scoket:Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,才能使 用TCP/IP协议。长连接
二. 专业名词扫盲
1. VoIP
(1) 什么是VoIP
VoIP: Voice over Internet Protocol 网络电话;将模拟的声音讯号引经过压缩与封包之后,以数据封包的形式在IP网络进行语音讯号的传输,通俗来说也就是互联网电话或IP电话。
(2) 第三方有哪些
linphone /VVSIP
2. BI
1》 BI:(Business Intelligence) 商业智能;商业智能通常被理解为将企业中现有的数据转化为知识,帮助企业做出明智的业务经营决策的工具
2》BI工具 : fineBI 等
3. Slack
Slack 是聊天群组 + 大规模工具集成 + 文件整合 + 统一搜索的办公软件
4. ARM、ASM
1》 ARM:Advanced RISC Machines,是嵌入式中的一种架构
2》 ASM:ASM是汇编语言源程序的扩展名,汇编程序员也称汇编为ASM。
5. ES5/ES6
ES5/ES6:是 ECMAScript 的版本号 ,ECMAScript 是JavaScript的核心
6. react-redux
react-redux:它是redux和react结合的一个框架(前端框架)
7. RestApplication
RestApplication:即带REST架构风格的应用,REST=Representational State Transfer(表征状态转移)
8. LBS开发
Location Based Services 又称定位服务
9. Widget
Widget,中文译名被称作是微件,是一小块可以在任意一个基于HTML的web页面上执行的代码;在iOS上,Widget可以在通知中心进行管理。
10. HLS / RTMP
HLS:HTTP Live Streaming,是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案。
RTMP:(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,是一种私有协议,可用于实现直播、点播应用
11. 知识杂烩
(1)数组去重复: NSArray *newArr=[oldArr valueForKeyPath:@“@distinctUnionOfObjects.self”];
(2)块枚举法
NSArray *arr1 = @[@1,@2,@3,@4,@5];
[arr1 enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"idx=%zd,obj=%@",idx,obj);
}];
(3)转场动画
CATransition *animation = [CATransition animation]; animation.duration = 1.0; animation.timingFunction = UIViewAnimationCurveEaseInOut; animation.type = @"pageCurl"; //animation.type = kCATransitionPush; animation.subtype = kCATransitionFromLeft; [self.view.window.layer addAnimation:animation forKey:nil]; [self presentModalViewController:myNextViewController animated:NO completion:nil];
12. 指纹 虹膜 的集成
第三方平台:EyeKey(集成了人脸识别,指纹,虹膜)
13. USB、多媒体、图像识别
(1)USB: ios通过usb和外设通信,硬件需要通过MFi认证
如:数据线 -》苹果为了保证设备的安全性,数据线中都内置了一块芯片,起识别作用。在使用过程中,如果该产品没有通过 MFi 认证(没有内置芯片),那么 iOS 系统就会拒接识别,使数据线无法正常工作。
使用EAAccessory.framework 框架 参考
不认证使用 USBMuxd 参考
(2)多媒体:
音视频的播放: AudioToolbox.framework和AVFoundation.framework。 参考
(3)图像识别
14. MVVM 的使用
15. CoreText 与CoreImage
CoreText:图文混排
CoreImage: 图像处理
16. SDK
(1)扫码: ZBarSDK
(2)压缩/解压: ZipArchive
(3)数据框遮挡: IQKeyboardManager
(4) 抽屉效果: SWRevealViewController
17. 待学清单
- 图表绘制
- 熟悉软件研发的基本设计模式,实现方法,了解使用条件;
- DES、RSA等相关技术
- 熟悉XMPP协议
- 对象生命周期、内存管理、协议、特性、 blocks等
- 熟悉一下直播要用什么开发,以及语音,视频 智能家居 HomeKit