- 博客(384)
- 资源 (2)
- 收藏
- 关注
原创 Sendable协议是如何做到可以在并发环境中传递的类型
显式符合 Sendable 的可变类型:如果类型是可变的,并且开发者明确保证了它在并发环境下是安全的,那么这个类型也可以符合 Sendable 协议。不可变类型:如果一个类型是不可变的(例如结构体或常量类型),它可以安全地在多个并发任务间传递,因为它的状态不会改变,任何任务都不会对其内部数据进行修改。例如,Sendable 允许我们把类型传递到不同的并发任务或队列中,前提是这个类型是不可变的,或者其内部的状态是同步的。不可变性:如果一个类型的属性或状态是不可变的,编译器允许它符合 Sendable 协议。
2025-02-08 11:19:33
626
原创 详解Swift中 Sendable AnyActor Actor GlobalActor MainActor Task、await、async
Actor 和 MainActor:当你在 Task 中使用 await 时,如果你的任务需要访问某个 Actor 类型的数据,确保你使用正确的并发上下文。如果你将 Actor 的实例作为任务的一部分进行传递,它需要符合 Sendable 协议,这意味着 Actor 中的所有状态和数据也需要是 Sendable 的。await 和 async 会创建异步任务,如果传递的数据不符合 Sendable,编译器会报错,提示数据类型不是可发送的。Task、async 和 await 用于创建和管理异步任务。
2025-02-07 17:17:22
1192
原创 # C指针地址&CUP寄存器访问&IO内存映射
寄存器文件是处理器内部用于存储数据、控制信息和状态信息的重要组成部分。它由多个寄存器构成,通过高效的硬件设计,支持快速的数据存取。寄存器的高速访问能力使得它们在计算中扮演着关键角色。与内存不同,寄存器数量有限且存取速度更快,因此它们用于存储临时数据、运算结果和控制信号-----------------------------------分割线-------------------------------------寄存器的存储空间并不在 CPU 缓存中,而是直接位于CPU 内部。
2025-02-07 14:58:40
588
原创 基于 iAP2 协议 的指令协议,用于对安防设备的 MCU 进行操作
2. 通用性:支持对安防设备的常见功能进行操作,如状态查询、设备控制、参数配置等。• 协议支持 设备控制、网络配置 和 参数设置 等常见功能,可根据业务需求扩展。• 数据包包含 头部、指令类型、数据区 和 校验字段,易于解析和扩展。• 指令编号:0x01(配置 Wi-Fi)• 数据区长度:0x0016(22 字节)• 数据区长度:0x0000(无数据区)• 数据区长度:0x0000(无数据区)• 指令编号:0x01(查询设备状态)• 固定消息头:用于标识合法数据包。• 数据区(可变):实际的指令参数。
2024-12-18 18:18:04
764
原创 Xcode Build Script path
如果你需要引用脚本所在的“当前目录”,在 Shell 脚本中,你可以直接使用 . 来表示当前目录,或者使用 $(pwd) 来获取当前目录的完整路径。不过,在 Xcode 的 Build Script 中,通常更倾向于使用这些特定的环境变量,因为它们能够提供更准确和一致的路径信息,特别是在复杂的项目结构中。关于表示当前路径的变量,Xcode 提供了一系列环境变量来引用不同的路径和设置。例如,如果你想引用位于项目根目录下的一个脚本,你可以使用${SRCROOT}/path/to/script.sh这样的路径。
2024-01-18 16:03:08
606
原创 Could not find ‘rexml‘ (~> 3.2.4) - did find: [rexml-3.1.9.1] (Gem::MissingSpecVersionError)
添加到。
2023-10-24 18:58:05
787
原创 kCVPixelFormatType_32BGRA 格式的CMSampleBuffer sampebuffer 如何转化为 AVFrame
这是因为图像数据在内存中不一定是连续存储的,特别是当图像的宽度不是内存对齐的倍数时。为了提高内存访问性能,图像每行的末尾可能会有一些填充字节,使得每行都对齐到某个字节边界(如4字节或8字节边界)。它可能等于图像宽度乘以每像素的字节数(对于BGRA是4字节),也可能更大,取决于是否有填充字节。而是需要逐行拷贝数据,确保每行的数据都被正确地复制到AVFrame中。简而言之,逐行拷贝是为了确保正确处理任何可能存在的行填充,并确保AVFrame的数据布局与CMSampleBuffer匹配。
2023-09-21 15:09:41
483
原创 WebRTC 的多媒体音视频帧传输协议
创建自定义的媒体源:对于视频,你可以创建一个类,该类继承自 VideoSourceInterface。此接口提供了将视频帧输入到 WebRTC 系统的方法。对于音频,你可以创建一个类,该类继承自 AudioSourceInterface。输入数据到你的媒体源:一旦你有了自定义的媒体源,你需要有一种方法将数据(如音视频帧)输入到这些源中。你可能会从外部设备、文件、网络流或其他来源获取数据。创建自定义的接收器:对于视频,你需要实现一个与 VideoSinkInterface 相关的类。
2023-09-18 09:01:51
578
原创 WebRTC 如何指定 H265解码器
WebRTC 本身支持多种视频编解码器,但 H.265/HEVC 编解码器的支持主要取决于浏览器或应用的实现。不过,如果你确定你的 WebRTC 实现和对端支持 H.265,可以通过修改 SDP 来优先选择 H.265 编解码器。当你创建或接收一个 offer 或 answer 时,你将会得到一个 Session Description,也叫做 SDP (Session Description Protocol)。搜索 SDP 中与 H.265 有关的 “m=” 行。设置修改后的 SDP。
2023-09-12 19:43:23
1147
原创 WebRTC 源码 编译 iOS端
这将为 ARM64 架构(最常用于现代 iOS 设备)编译 WebRTC。如果你需要为其他架构(如 x86_64,用于模拟器)编译,你可以通过调整。使用 git 克隆 depot_tools 并将其添加到你的 PATH 中: /path/to/depot_tools 替换为自己的路径。如果 fetch --nohooks webrtc_ios 拉取代码太多 失败可以改为 就可以了。你可以将此框架添加到你的 Xcode 项目中,并根据需要使用其 API。一旦编译完成,你会在。
2023-09-11 19:13:44
1295
原创 WebRTC +Signal + ICE
在 WebRTC 中,ICE(Interactive Connectivity Establishment)服务是用于解决网络地址转换(NAT)和防火墙障碍的关键组件。
2023-08-17 20:34:09
949
原创 解析 WebRTC
初始化WebRTC会话:在使用WebRTC之前,需要初始化WebRTC会话,以确保WebRTC框架的正确设置和配置。初始化步骤通常包括以下内容:创建PeerConnectionFactory:通过创建PeerConnectionFactory来初始化WebRTC会话,它负责管理音视频工厂和创建PeerConnection。配置媒体约束:在创建PeerConnection时,可以设置媒体约束来指定音视频的参数,如分辨率、帧率、码率等。
2023-07-25 14:20:56
1042
原创 UnsafePointer, UnsafeMutablePointer, UnsafeBufferPointer, UnsafeMutableBufferPointer, UnsafeRawPoint
用途:UnsafeMutableRawPointer 用于以原始的字节形式访问可变内存,没有类型信息,适合用于与 C API 交互。用途:UnsafeRawPointer 用于以原始的字节形式访问内存,没有类型信息,适合用于与 C API 交互。用途:UnsafeRawBufferPointer 用于以原始的字节形式访问连续的不可变内存缓冲区。C/C++ 中对应:常规数组或指向不可变数据的指针。C/C++ 中对应:指向可变数据的数组或指针。C/C++ 中对应:指向不可变数据的指针。
2023-07-20 18:08:33
980
原创 deinitialize 和 deallocate 区别
deinitialize() 和 deallocate() 是 Swift 中用于处理原始内存的函数,但它们有不同的作用和用途。
2023-07-20 17:40:41
248
原创 Swift 中 Actor、 AnyActor 、 MainActor 、GlobalActor 异同点 和 用法
在 Swift Concurrency 中,有几个与 Actor 相关的特性和协议,包括 Actor、AnyActor、MainActor 和 GlobalActor。它们都是用于并发编程和处理异步任务的特殊类型和特性。
2023-07-20 16:03:41
1077
原创 Swift Actor
通过使用 Actor,你可以将数据和操作封装在一个单独的执行上下文中,并保证它们在同一时间只能被一个任务访问和修改。这样可以避免多线程并发导致的数据一致性问题。这样,任何在 actor 中定义的代码都会在同一个队列上串行执行,确保数据的线程安全性。数据保护:通过将数据封装在 actor 中,并通过 await 和 async 来访问和修改数据,可以确保数据在多线程环境中的安全访问。通过将数据和操作封装在 actor 中,并使用 await 和 async 来访问和修改数据,可以实现更安全和可靠的并发处理。
2023-07-20 15:49:05
564
原创 error in Xcode File not found:odeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a
解决办法:
2023-06-01 18:03:17
267
原创 java 实现开启异步线程的几种方式
需要注意的是,无论使用哪种方式,都应该根据具体情况选择合适的线程池和调度器,以确保异步操作在适当的线程上执行,并在需要更新UI时切换回主线程。在Java中,有多种方式可以实现异步线程以避免在主线程中执行耗时操作导致界面卡顿的问题。
2023-04-14 08:17:39
3003
原创 C++ 智能指针 实现代码
智能指针的底层实现是通过 C++ 标准库提供的模板类来实现的,其中包含了一些与对象管理和资源释放相关的成员函数和成员变量。用于记录有多少个智能指针共享同一个对象。通过在构造函数、拷贝构造函数、析构函数和赋值运算符中更新引用计数,并在引用计数为零时释放资源,从而实现了对对象生命周期的管理。上面的实现是一个简化版的智能指针,它包含了一个裸指针。用于指向动态分配的对象,一个引用计数。
2023-04-14 08:13:16
249
原创 C++ 虚函数表
派生类的虚函数表会继承基类的虚函数表,并可以通过重写虚函数来修改其中的函数指针,从而实现对虚函数的覆盖。当子类继承自父类并且覆盖(override)了父类的虚函数时,子类会在自己的虚函数表中存储覆盖后的函数指针,而不会影响到父类的虚函数表。父类的虚函数表中包含了父类的虚函数,子类的虚函数表中包含了子类的虚函数,以及可能的新增虚函数。当一个对象调用虚函数时,首先会通过对象的虚函数表指针找到虚函数表的地址,然后根据函数在虚函数表中的索引找到对应的函数指针,最后通过函数指针进行函数调用。
2023-04-13 23:33:14
761
原创 Import Local Swift Package No such module TestPackage
Import Local Swift Package No such module TestPackage
2022-11-02 23:05:53
624
原创 Delete Android Virtual Device for mac
Delete Android Virtual Device for mac
2022-07-14 12:20:15
681
原创 NSObject、Class 、objc_class 、objc_objct、 isa_t
NSObject Class objc_class objc_object isa_t
2022-06-03 20:39:36
169
原创 Error: Failed to download metadata for repo ‘epel‘: Cannot download repomd.xml: Cannot download repo
华为云CentOS 8.1系统:参考配置Yum源(CentOS 8.1)配置Yum源
2022-05-31 09:45:09
5752
2
原创 UICollectionView received layout attributes for a cell with an index path that does not exist
Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘UICollectionView received layout attributes for a cell with an index path that does not exist: <NSIndexPath: 0x28223ea40> {length = 2, path = 0 - 1}’open func ins
2021-08-10 11:14:09
706
原创 Command MergeSwiftModule failed with a nonzero exit code (Xcode12.5.1)
error:Command MergeSwiftModule failed with a nonzero exit codeMergeSwiftModule normal arm64 (in target ‘xxxx’ from project ‘Pods’)<unknown>:0: error: circular reference<unknown>:0: note: through reference here<unknown>:0: note: throu
2021-07-07 16:59:07
1841
1
原创 Frida-ios-dump 使用
安装 Frida-ios-dumphttps://iosre.com/t/frida-ios-dump/11640brew install pythonbrew install wget安装pip:wget https://bootstrap.pypa.io/get-pip.pysudo python3 get-pip.py安装usbmuxd:brew install usbmuxdrm ~/get-pip.py安装frida for macsudo pip install
2021-05-15 10:43:01
511
原创 dumpdecrypted 使用
手机安装文件 openssh app file Conduit ///查看 运行程序路径ps -Adumpdecrypted.dylib 编译make 修改 make的CFLAGS = -target arm64-apple-ios8.0签名ldid -S dumpdecrypted.dylib放入路径文件中放入var/root///动态库在注入路径DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/A
2021-05-15 10:41:58
396
2
原创 dumpdecrypted.dylib: code signature in (dumpdecrypted.dylib) not valid for use in process using Libr
yld: warning: could not load inserted library 'dumpdecrypted.dylib' into hardened process because no suitable image found. Did find: dumpdecrypted.dylib: code signature in (dumpdecrypted.dylib) not valid for use in process using Library Validation: mappe
2021-05-14 14:33:56
464
原创 dumpdecrypted Symbol not found: ___chkstk_darwin
dyld: Symbol not found: ___chkstk_darwin Referenced from: dumpdecrypted.dylib (which was built for iOS 14.5) Expected in: /usr/lib/libSystem.B.dylib in dumpdecrypted.dylib修改 MakefileCFLAGS = -target arm64-apple-ios8.0链接
2021-05-14 14:31:53
950
原创 completely unsigned? Code has to be at least ad-hoc signed
not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.解决办法链接
2021-05-07 20:13:40
964
原创 Metal iOS deployment target
Set iOS deployment target -mios-version-min= "10.0"
2021-04-20 14:29:22
208
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人