Sucha's Blog ~ Archive for August, 2025

25年8月30日 周六 21:56

iOS GCD (Grand Central Dispatch)的一些探索

面试遇到了相关问题,答得很烂,才发现自己之前只是粗浅地使用,并未理解。

代码是类似这样的

- (void)exampleFunction {
    dispatch_queue_t queue = dispatch_queue_create(@"test_queue", NULL);
    NSLog(@"1");
    dispatch_queue_async(queue, ^{
        NSLog(@"2");
    });
    NSLog(@"3");
    dispatch_queue_sync(queue, ^{
        NSLog(@"4");
    });
    NSLog(@"5");
}

那么其输出顺序将是:

1
3
2
4
5

更进一步,dispatch_queue_create 如果不指定绑定的 queue,那么其运行就是当前发起 queue 的空间。

看了一下 GCD 的源码,不甚懂,太多条件编译了,以及宏代码。

问了一下 AI,pthread、NSThread、GCD、NSOperationQueue 的区别,大概如下

在 iOS 上用的最多的是 GCD,GCD 创建的时候,可以设定是串行、并行,优先级等,但不能指定其底层 thread,或者关联到自己创建的 NSThread 上。

若提交的任务闭包是一个死循环,那么运行该闭包的 dispatch_queue 会卡住,关联的 thread 会吃满能够分配到的 CPU 资源,才被调度出去。

以上串行 queue 的调度逻辑,体现在上面例子代码“2”、“4”的输出顺序上,async、sync 闭包运行的 queue 空间,也是该 queue 创建时候的空间(有另外的 create 接口,提供关联的管理queue,比如不同层级的优先级queue)。

但如果是并行 queue,提交的任务闭包,就有可能被同时调度运行,具体跟该体系的 CPU 核心数量、线程调度资源有关系,但被重入是无法避免的。为了保证数据的一致性,提交到并行 queue 的任务闭包,得自己保证数据一致性。

NSOperationQueue 由于底层仍然是关联的 GCD dispatch_queue,所以逻辑是一样的。

以上,可以看到 GCD 是关注闭包,即逻辑关联的数据,而不需要关注线程空间的创建、销毁、挂起、恢复、CPU 的调度和分配逻辑。

GCD 内建了比如主队列(UI相关)、默认队列、后台队列等等共 5 种 QOS 分配策略的队列。

如果是自己创建的 pthread、NSThread 得通过相关接口,才能设置线程的优先级,但另一方面,如果有些业务逻辑包含其依赖的数据,在一个死循环里面更好处理,那不如就直接用 NSThread,或许比 GCD 的分配更好吧。

25年8月30日 周六 21:56

交管12123——学法减分

之前老家的车被我开到了深圳,住的离东莞很近,就经常到东莞的超市买东西,反正车一周总要热一次,补电瓶的电的。

经常是下班回来后过去,都 20:30 之后了,那次是看到了红灯,但没管那么多,跟着人家粤S的车后面右转,这回是记 6 分,200 块。

好在 交管12123 app 上,可以学法减分,上面会红点提示,但是如果一次被扣 12 分,就得妥妥的重新考试拿驾照了吧,还有,一年内考试最多可以补 6 分,所以,一年内是有 18 分可以扣的?

所谓的学法减分,首先你得被扣分了,然后才能看减分入口,有网上学习,以及线下公益活动可选。这么热的天,还是学法减分好,首先得申请,通过之后才能看警示视频,之后是考试,20 道题错题少于3道才能过,只能补考一次,时间限制没那么严。

看警示视频每次至少 30 分钟,间隔 5 分钟上报时间,中间有人脸识别流程,时间到了会提示,可以进入下一个环节,进行考试了。

我裸考发现很难考,还是得多学习才能考试通过的。

25年8月30日 周六 21:36

凡人修仙传(3)

电子书凡人修仙传我已经看到慕兰人从对抗到联合了,但只可惜动画进度很慢,才到了慕沛灵自爆贴身侍女这里,韩立从闭关中出来。

谁想到,电视剧都有了,不过我没有会员,都是从夸克下载的,也是断断续续地下载,不是 4k 的不看,要不 27 寸屏幕看着就太粗糙了,蓝瘦。

电视剧的人物南宫婉的嘴是歪的,有仙女之气,但金晨来演,有点太冷了,我先看的是动画,原著里面没有那么多吃醋的场景,动画最多,哈哈哈,电视剧里面人物太冷了,从动画过来的,有点不习惯。

其实看过原著就知道,电视剧很多是借鉴动画的。

比如韩立的师傅李化元,原著里面对于其陨落,是在慕兰人入侵之后,当时韩立已经是落云宗长老了,见到了黄枫谷的弟子们,才知道的;动画里面,李还因为红佛跟云露老祖对抗,戏份还是很多的;电视剧因为篇幅问题吧,这段比较少。

电视剧篇幅的原因,只有 30 集,以韩立从古传送阵离开天南为结束;结束时,也跟动画剧情一样,被王婵追杀,最后王婵看着韩立从古传送阵离开。

电视剧的动画效果,跟动画版比起来,大部分是不如的,不过也有出彩的部分,毕竟真人演,如果有不习惯动画的,真人可以过渡一下。

另外,从凡人的篇幅看,真人版应该也会拍外海的吧,然后看情况也会有其他篇的。

总的来说,还行吧,能看,但看过动画的,就没必要看电视剧了,动画才是最雕的。