简历中主要知识解析
instruments
https://www.jianshu.com/p/e09f6d52f390
Charles
http://blog.csdn.net/wangwei1138568289/article/details/51222661
HTTP****和****HTTPS****网****络协议
http://blog.csdn.net/FreeTourW/article/details/52222213
我们的网络请求加密:随机数,时间戳,token,签名,MD5加密
ios开发中的基本设计模式(代理,观察者,MVC,单例,策略,工厂,MVVM,原型,Target-Action,通知(notification)机制)
http://blog.csdn.net/baihuaxiu123/article/details/50867427
iOS存储方式之归档
http://blog.csdn.net/cloudox_/article/details/55001487
iOS的消息推送机制到底是怎样的?
https://www.zhihu.com/question/59195951
数据存储-沙盒
· 每个应用程序的活动范围都限定在自己的沙盒里。
· 不能随意跨越自己的沙盒去访问别的应用程序沙盒中的内容。
· 应用程序向外请求或接收数据都需要经过权限认证。
简单数据存储: 沙盒,存储。NSString、NSArray、NSDictionary、NSData
复杂对象的存储:归档就是通过将复杂对象(自定义Person类型的对象)转换为NSData类型对象,遵守NSCoding协议
- (void)encodeWithCoder:(NSCoder *)aCoder//归档
<pre style="background:whitesmoke">- (instancetype)initWithCoder:(NSCoder *)aDecoder//反归档</pre>
http://blog.csdn.net/a787188834/article/details/78804937
核心动画(三)关键帧动画、动画组、转场动画
属性动画,不可直接使用,改变属性值,改变动画效果
基础动画 即平移动画(2点变化)
帧动画,根据数组路径,改变运动轨迹
动画组,可以达到多种动画效果
转场动画,切换视图时添加的动画
http://blog.csdn.net/wangwei1138568289/article/details/51106492
http://blog.csdn.net/wangwei1138568289/article/details/51162714
http://blog.csdn.net/wangwei1138568289/article/details/51194463
iOS 视频剪切、旋转,视频添加音频、添加水印,视频导出
http://blog.csdn.net/wangwei1138568289/article/details/51965271
TableView的优化
http://blog.csdn.net/wangwei1138568289/article/details/51408216
iOS常用的存储方式介绍
NSUserDefaults基本的用户设置,数据量很小
Plist文件 直观的看到文件的内容,不需要经常地修改,如保存不同主题的数据
解归档 自定义的对象进行存储
手动存放沙盒 沙盒中只能保存OC中的基本数据,自定义的对象不能直接存入
CoreData
https://www.cnblogs.com/FBiOSBlog/p/5819418.html
ios开发中的基本设计模式(代理,观察者,MVC,单例,策略,工厂,MVVM,原型,Target-Action,通知(notification)机制)
http://blog.csdn.net/baihuaxiu123/article/details/50867427
代理
当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。
1有多个相关方法2为了避免循环引用3 cellForRowAtIndexPath用代理,block会被创建多次就会造成内存占用的情况
block在使用上和代理的性质没有多大区别 其实就是开辟空间和指针指向
关键是看有没有造成空间浪费和循环引用
block 和 delegate 都可以通知外面。block 更轻型,使用更简单,能够直接访问上下文,这样类中不需要存储临时数据,使用 block 的代码通常会在同一个地方,这样读代码也连贯。delegate 更重一些,需要实现接口,它的方法分离开来,很多时候需要存储一些临时数据,另外相关的代码会被分离到各处,没有 block 好读。
观察者模式
一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息
MVC模式
数据模型,控制器逻辑,视图展示将应用程序进行逻辑划分
model-即数据模型,view-视图展示,controller进行UI展现和数据交互的逻辑控制
[图片上传失败...(image-121c9-1522397563179)]
单例模式
确保程序运行期某个类,只有一份实例,用于进行资源共享控制
策略模式
定义算法族,封装起来,使他们之间可以相互替换
实例:排序算法,NSArray的sortedArrayUsingSelector;
工厂模式
工厂负责制造各种产品,客户端,需要什么产品,工厂就会相应的生产出什么样的产品。
MVVM模式
MVVM模式是Model-View-ViewMode模式的简称。由视图(View)、视图模型(ViewModel)、模型(Model)三部分组成
[图片上传失败...(image-a4023c-1522397563179)]
在MVVM里,view和view controller正式联系在一起,我们把它们视为一个组件。视图view仍然不能直接引用模型model,当然controller也不能。相反,他们引用视图模型viewmodel。
viewmodel是一个放置用户输入验证逻辑,视图显示逻辑,发起网络请求和其他各种各样的代码的极好的地方。有一件事情不应归入view model,那就是任何视图本身的引用(不要在view model中使用 #import UIKit.h )
借助了IOS响应式编程框架ReactiveCocoa作为辅助
1. 低耦合。View可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。 2. 可重用性。可以把一些视图的逻辑放在ViewModel里面,让很多View重用这段视图逻辑。 3. 独立开发。开发人员可以专注与业务逻辑和数据的开发(ViewModel)。设计人员可以专注于界面(View)的设计。 4. 可测试性。可以针对ViewModel来对界面(View)进行测试
原型模式
对一个基类对象进行克隆复制创建出模型一样的副本
Target-Action模式
目标-行为,给imageView添加点击事件
通知(notification)机制
在通知机制中对某个通知感兴趣的所有对象都可以成为接受者
投送对象和接受者是一对多的关系
removeObserver:name:Object:消息解除注册,以后不再接受通知
iOS****并发编程对比总结****,NSThread,NSOperation,GCD - iOS
进程
· 正在进行中的程序被称为进程,负责程序运行的内存分配
· 每一个进程都有自己独立的虚拟内存空间
线程
· 线程是进程中一个独立的执行路径(控制单元)
· 一个进程中至少包含一条线程,即主线程
· 可以将耗时的执行路径(如:网络请求)放在其他线程中执行
创建线程的目的就是为了开启一条新的执行路径,运行指定的代码,与主线程中的代码实现同时运行
并发:指两个或多个任务在同一时间间隔内发生,但是,在任意一个时刻点上,CPU只会处理一个任务
NSThread 建立一个线程非常方便,管理多个线程难。[NSThread currentThread]当前线程
NSOperation/NSOperationQueue 使用GCD实现的,限制最大并发数量、操作之间的依赖关系
GCD 基于C语言的底层API,用Block定义任务
· 队列的特点是先进先出(FIFO)的
- GCD的函数都是以dispatch(分派、调度)开头的
队列dispatch_queue_t
· 串行队列,队列中的任务只会顺序执行
· 并行队列,队列中的任务通常会并发执行
操作
· dispatch_async 异步操作,会并发执行,无法确定任务的执行顺序
· dispatch_sync 同步操作,会依次顺序执行,能够决定任务的执行顺序
注:
- 队列不是线程?也不表示对应的CPU
- 队列就是负责调度的!谁空闲,就把任务给谁!
- 多线程技术的目的,就是为了在一个CPU上实现快速切换!
- 串行同步不会新建线程,操作顺序执行,没用
- 串行异步会新建线程,操作顺序执行,非常有用(既不影响主线程,又需要顺序执行的操作;应用:从网络上下载图片,滤镜)
· http://blog.csdn.net/zyq522376829/article/details/52373154
· http://blog.csdn.net/cordova/article/details/69060085
串行队列(一个接一个,排队跑步,保持队形)
[图片上传失败...(image-f6cd2e-1522397563178)]
并行队列 并排跑,类似于赛跑)
[图片上传失败...(image-5c616e-1522397563178)]
全局队列
[图片上传失败...(image-51d29-1522397563178)]
// 全局队列与并行队列的区别
// 1> 不需要创建,直接GET就能用
// 2> 两个队列的执行效果相同
// 3> 全局队列没有名称,调试时,无法确认准确队列
// 记住:在开发中永远用DISPATCH_QUEUE_PRIORITY_DEFAULT
// 多线程的优先级反转!低优先级的线程阻塞了高优先级的线程!
主队列
[图片上传失败...(image-cf606c-1522397563178)]
// 每一个应用程序都只有一个主线程
// 在iOS开发中,所有UI的更新工作,都必须在主线程上执行!
// 异步任务,在主线程上运行,同时是保持队形的