Clash 旁路由透明网关
Sep 12, 2022
正常的客户端上网流程: 客户端 => 路由器 => 互联网 加上旁路由后,流程变成: 客户端 => 旁路由(透明) => 路由器 => 互联网 客户端的 DNS 和网关的 IP 都指向旁路由,流量由旁路由转发。 …
aria2 并发下载
Sep 05, 2022
浏览器自带的下载是单线程下载,如果要加速下载资源需要使用 aria2 。 原来浏览器自带下载需要 1 小时,现在命令行只需要 5 分钟: $ aria2c -x16 -s16 https://... -x:每个服务器的最大连接数。 -s:每个文件所使用的连接数。 如果服务器限制了多并发下载,就没有效果了。 …
MacPorts 使用 Git 替代 Rsync 同步源
Sep 05, 2022
在使用 sudo port -v selfupdate 更新源的时候,发生了一个错误: Error: Failed to verify signature for MacPorts source! Error: Follow https://guide.macports.org/#project.tickets if you believe there is a bug. Error: /opt/local/bin/port: port selfupdate failed: Failed to verify signature for MacPorts source! 无法验证源的签名,暂时不确定是不是服务端的源有问题还是本地环境出了问题。 …
SwiftPM 编译命令参数
Aug 30, 2022
SwfitPM 全称是 Swift Package Manager ,是 Swift 的包管理工具。 SwiftPM 的 manifest 文件是 Package.swift,在编译源码之前需要先编译这个 manifest 文件,然后再执行它进行源码构建。 SwiftPM 的编译命令是 swift build,默认情况下是编译 debug 模式,release 模式需要增加参数:swift build -c release。 …
C++ 17: 结构化绑定(Structured Binding)
Aug 29, 2022
结构化绑定(Structured Binding)是 C++ 17 的新特性,是一个很方便的语法糖。 typedef struct Rect { double x; double y; double width; double height; } Rect; Rect bounds{ 100, 100, 300, 400 }; auto [ x, y, w, h ] = bounds; 以上代码中,auto [] 就是结构化绑定的语法,x, y, w, h 4 个变量名就和结构体中的字段相对应。 …
Swift 调用私有方法
Aug 29, 2022
_UICreateScreenUIImage 是用于生成屏幕快照的一个私有方法,效果类似按下截屏组合键,不过这个函数调用不会触发截屏音效。 在 Objective-C 里,只需要声明一下方法的原型就可以使用了。 在 Swift 里可以使用 @_silgen_name 来达到同样的效果: …
Xcode 13 中优化 Swift 对象的生命周期
Aug 28, 2022
默认情况下,Swift 对象的生命周期如下: 在 WWDC 21 中 ARC in Swift: Basics and beyond,新发布的 Xcode 13 增加了一个选项,用来优化 Swift 对象的生命周期: 当这个选项开启后,对象原本要超出作用域才会析构,现在被优化为在作用域内不再被使用就会被析构。 这个特性是在编译期间进行的,由编译器在适当的地方插入 release 来提前结束对象的生命周期。 …
ARC 与 AutoreleasePool
Aug 27, 2022
Objective-C 中的 ARC 与 AutoreleasePool Objective-C 中的对象在引用计数为 0 的时候就会被释放,为了解决手动管理引用计数(MRC)容易发生内存泄漏或者过度释放的问题,引入了自动引用计数(ARC)。 …
使用 spctl 检查 App 的来源
Aug 22, 2022
spctl --assess --verbose XX.app 输出结果: 来自于 Apple 的软件: /Applications/Xcode.app: accepted source=Apple System 从 Mac App Store 下载的软件: /Applications/WeChat.app: accepted source=Mac App Store 开发者自己打包的软件: 没在在 Apple 进行公证: /Applications/Impactor.app: accepted source=Developer ID 进行了 Apple 公证: /Applications/Visual Studio Code.app: accepted source=Notarized Developer ID 公证机制是 macOS Catalina 中要求使用的: https://developer.apple.com/cn/news/?id=09032019a …
C++ 中使用 RAII 的注意事项
Aug 20, 2022
RAII (Resource Acquisition Is Initialization) 翻译为中文是「资源获取即初始化」。 通常用来做局部资源清理或者防止忘记解锁导致死锁: class LockGuard { public: LockGuard() { lock(); } ~LockGuard() { unlock(); } private: static pthread_mutex_t _fastmutex; void lock() { pthread_mutex_lock(&_fastmutex); } void unlock() { pthread_mutex_unlock(&_fastmutex); } }; pthread_mutex_t LockGuard::_fastmutex(PTHREAD_MUTEX_INITIALIZER); 以上代码定义了一个局部锁,锁生效的域和这个类的生命周期所在域一致。 …