1、基本介绍
1.1、OSSpinLock
1.1.1、自旋锁,iOS10及以后版本已标记过期;
1.1.2、锁定状态下,其他线程访问时处于忙等状态
1.1.3、存在优先级反转的问题而被放弃;
1.2、os_unfair_lock
1.2.1、互斥锁
1.2.2、锁定状态下,其他线程访[……]
Monthly Archives: November 2018
3 Replies
利用RunLoop来实现线程的保活,并封装子线程任务执行
1、基本思路
1.1、创建一个Helper类对NSThread类进行封装;
1.2、Helper类内部实现线程的创建、执行、销毁等一系列操作;
1.3、核心点在于RunLoop的循环执行,调用runMode:beforeDate方法让线程处于休眠状态,再通过while循环,使runloop执行结束后再次开启,循环条件外部控制,这样就能达到控制runloop的生命周期,从而保全线程的生命周期;
1.4、Helper类在销毁时,要及时更改runloop的循环条件,并唤醒或停止子线程中的runloop,runloop停止后线程结束,否则两者会一直存在内存当中,runloop因为没有及时被唤醒而一直处于休眠状态,线程因为runloop没有停止而无法释放;
1.5、Helper在使用NSThread创建子线程时也要注意循环引用的问题;
2、代码示例[……]
RunLoop的基本运行逻辑
一、基本逻辑描述:
1、通知Observer:进入Loop
2、通知Observer:即将处理Timers
3、通知Observer:即将处理Sources
4、处理Blocks
5、处理Source0(中间可能会处理Blocks)
6、如果存在Source1,跳转到第8步
7、通[……]
利用runtime拦截系统类对象方法调用
1 2 3 4 5 6 7 8 9 10 | #import "ViewController.h" #import @interface NSMutableArray (SA) @end @implementation NSMutableArray (SA) + (void)load { static dis[......]<p class="read-more"><a href="https://www.yusian.com/blog/project/2018/11/23/0906261409.html">继续阅读</a></p> |
使用Runtime动态创建一个类
关键代码:
1 2 3 4 5 6 7 8 9 10 | #import "ViewController.h" #import @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [supe[......]<p class="read-more"><a href="https://www.yusian.com/blog/project/2018/11/23/0903501405.html">继续阅读</a></p> |