ios开发 之 多线程

目录

第一节:多线程简介

线程执行原理

主线程

多线程解决方案

pthread

__bridge

NSThread

线程的状态

第二节:多线程访问资源

@Synchronized 

nonatomic 、atomic

自动释放池

属性修饰符

第三节:消息循环

消息模式

第四节:GCD

Barrier

dispatch_once、dispatch_after 

构建单例模式

调度组

第五节:NSOperation

GCD 与 NSOperation 的区别

自定义operation

第六节:案例

第七节:沙盒缓存

第八节:SDWebImage

第九节:关联对象

第十节:NSCache


 

第一节:多线程简介

ios开发 之 多线程_第1张图片ios开发 之 多线程_第2张图片ios开发 之 多线程_第3张图片

线程执行原理

ios开发 之 多线程_第4张图片ios开发 之 多线程_第5张图片ios开发 之 多线程_第6张图片

主线程

ios开发 之 多线程_第7张图片

多线程解决方案

ios开发 之 多线程_第8张图片

pthread

ios开发 之 多线程_第9张图片

__bridge

因为arc 中,会自动管理内存,但是arc 关不了c 语言,所以在c 语言中,创建的对象要自己去释放,桥接就是告诉c 语言,这个对象要去释放

NSThread

ios开发 之 多线程_第10张图片

线程的状态

ios开发 之 多线程_第11张图片ios开发 之 多线程_第12张图片

第二节:多线程访问资源

ios开发 之 多线程_第13张图片

@Synchronized 

这个对象的锁默认是开着的, 开着意味着线程可以执行代码,sychronized 表示加把锁

ios开发 之 多线程_第14张图片

ios开发 之 多线程_第15张图片 ios开发 之 多线程_第16张图片

nonatomic 、atomic

ios开发 之 多线程_第17张图片ios开发 之 多线程_第18张图片

自动释放池

ios开发 之 多线程_第19张图片 子线程无法使用主线程的自动释放池,所以要自己创建ios开发 之 多线程_第20张图片ios开发 之 多线程_第21张图片

属性修饰符

ios开发 之 多线程_第22张图片

总结起来,使用COPY修饰符进行的是浅拷贝,复制的是对象的引用而不是对象本身。由于NSString是不可变的,所以在实际使用中并不会出现问题。如果需要进行深拷贝,可以使用NSMutableString来创建一个可变的字符串副本。 

第三节:消息循环

ios开发 之 多线程_第23张图片ios开发 之 多线程_第24张图片

消息模式

每一个事件和定时器都要有一种模式,它要和线程的模式保持一致,才能运行

ios开发 之 多线程_第25张图片ios开发 之 多线程_第26张图片ios开发 之 多线程_第27张图片

第四节:GCD

ios开发 之 多线程_第28张图片

ios开发 之 多线程_第29张图片ios开发 之 多线程_第30张图片ios开发 之 多线程_第31张图片ios开发 之 多线程_第32张图片ios开发 之 多线程_第33张图片ios开发 之 多线程_第34张图片ios开发 之 多线程_第35张图片

Barrier

ios开发 之 多线程_第36张图片

ios开发 之 多线程_第37张图片
dispatch_once、dispatch_after 

ios开发 之 多线程_第38张图片

ios开发 之 多线程_第39张图片

构建单例模式

原始单例是线程不安全的

ios开发 之 多线程_第40张图片 ios开发 之 多线程_第41张图片

调度组

ios开发 之 多线程_第42张图片

第五节:NSOperation

ios开发 之 多线程_第43张图片ios开发 之 多线程_第44张图片ios开发 之 多线程_第45张图片ios开发 之 多线程_第46张图片ios开发 之 多线程_第47张图片

ios开发 之 多线程_第48张图片

ios开发 之 多线程_第49张图片

GCD 与 NSOperation 的区别

ios开发 之 多线程_第50张图片ios开发 之 多线程_第51张图片ios开发 之 多线程_第52张图片

 取消操作就是所有的operation 为cancelled

ios开发 之 多线程_第53张图片

优先级只能保证该operation 执行的几率更大一些,并不能保证该operation优先于其他operation执行完

ios开发 之 多线程_第54张图片

ios开发 之 多线程_第55张图片

自定义operation

ios开发 之 多线程_第56张图片

第六节:案例

ios开发 之 多线程_第57张图片

layout subviews 这个方法用来设置控件的 frame 

ios开发 之 多线程_第58张图片ios开发 之 多线程_第59张图片

block 中使用到self,尽量使用__weak ,避免循环引用

第七节:沙盒缓存

ios开发 之 多线程_第60张图片ios开发 之 多线程_第61张图片ios开发 之 多线程_第62张图片

第八节:SDWebImage

ios开发 之 多线程_第63张图片

ios开发 之 多线程_第64张图片
第九节:关联对象

因为分类中无法添加属性,所以使用关联对象的方式

ios开发 之 多线程_第65张图片

第十节:NSCache

ios开发 之 多线程_第66张图片

你可能感兴趣的:(SDK,ios,objective-c)