C 语言的高阶函数
什么是高阶函数?
这个概念来自于函数式编程,高阶函数是指至少支持以下特定之一的函数:
- 将一个或多个函数作为参数
- 返回函数作为其结果
现代的高级语言几乎都支持这一特性,如 Go、JavaScript、Swift、Kotlin 等。
C 语言本身不支持高阶函数,但是可以通过函数指针来达到这一效果。
这个概念来自于函数式编程,高阶函数是指至少支持以下特定之一的函数:
现代的高级语言几乎都支持这一特性,如 Go、JavaScript、Swift、Kotlin 等。
C 语言本身不支持高阶函数,但是可以通过函数指针来达到这一效果。
弱引用本身就很奇怪,本文是收集了一些常见的编程语言对弱引用的实现方法。我们的目标是找到最佳方法用于 Vale,以符合其快速、内存安全和易于使用的目标。最后,我们制定了一个全新方法。
大部分共享所有权的编程语言中,如 Python、Swift、Obj-C、C#,正常的引用是"strong"的,即我们常说的强引用。只要还有一个强引用指向对象,那么对象就不能被释放。当最后一个强引用消失之后,对象被释放。
在引用计数的语言里,如 Swift,当不再有强引用指向对象时,能够立即通知删除对象。在跟踪垃圾回收的语言里,如 Java,解释器会通 过事件的方式通知删除对象。
相对于强引用,我们还有弱引用,类似于一个快捷方式或者软链接一样,不会对对象进行保活。目标对象被释放时,他们会变成 null。
我们知道强引用容易触发“循环引用”的问题,导致对象无法被释放,最终内存泄漏。这时我们可以引入弱引用打破这个循环,例如 Swift 里面的[weak self]
。我们还可以通过弱引用来判断一个变量是否还存在,如果存在还可以继续后面的逻辑。
前置声明:本文是本人关于 SIP 资料的一个梳理结果,80%的内容都是摘自各个参考资料的一部分,20%是自己在 12-14 年间 SIP 相关工作的理解感悟,然后根据自己拟定的目录大纲进行整合。本文所有版权不归我,如有侵权,请告知,必删。
为什么要写这么一篇文章?
我司(Legrand)核心产品是楼宇视频对讲设备,在业界的名气还不错。
视频通话或者视频会议技术栈通常是 SIP 标准协议,我们当然也不例外。
自从我专做 iOS 开发之后,我就很久不玩 SIP 了,但是这些 SIP 的东西还是没有完全忘记。 最近领导给我们开了 Q2 业绩会,提出老旧系统改造,包括 SIP Server 升级,NAT 打洞啊,目的是为了提高系统的稳定性,节省服务器的资源开销。
这些工作跟我没啥关系,因为我不做服务器,但是勾起了我多年的回忆。随即产生一个想法,就是给当年完全不懂 SIP 的自己写一篇入门文章,当做是对自己过去工作、技术的一个总结。
OK,废话不多数,正文开始。
最近年终总结需要写一些外训的项目,实在不知道咋写,就把我这几年都会一直保持关注的技术大会罗列了出来。
苹果开发者大会,我已经连续关注 8 年了。按照惯例,苹果会在加州选择一个地方来举办直播,但这两年因为新冠疫情,改为线上发布会了。
有时候会在大会上发布一些硬件产品,但软件才是主角。
大会分为几天进行,第一天会有一个 Keynote 演讲,大概 2 小时左右,这个演讲里会介绍 macOS、iOS、watchOS、tvOS 等系统更新内容。
之后今天会连续发布各种开发类主题演讲,当然,我个人比较关注的是偏向 iOS 方向,比如新增的 Framework、API 变化、Swift 更新内容、Xcode 更内容等等。最重要的是会讲解一些开发实践,比如 2021 年的“Use async/await with URLSession”等。
另外,最近 3 年,苹果对视频增加了中文字幕,这对很多英文不是很好的同学来说就很给力了。