实时线程安全看门狗
该库针对iOS设备,作为被认为是非安全的Core Audio线程操作的看门狗
- 获取锁
- 分配内存
- 使用Objective-C
- 文件或网络I/O
它通过覆盖许多系统函数来实现,包括malloc
、free
、objc_storeStrong
、objc_msgSend
(目前只适用于64位设备和64位模拟器)、pthread_mutex_lock
和objc_sync_enter
、read
、write
等。当检测到调用时,会在控制台打印警告。您还可以在AERealtimeWatchdogUnsafeActivityWarning
上设置断点。
它不会捕获所有操作,也不会捕获苹果自己的系统代码中的任何操作,但会捕获一些锁、一些内存分配、所有Objective-C的使用(但不是Swift)、所有对象保留和一些常见的I/O任务,包括您的代码和您使用的任何静态库中的代码。
此库还已集成到The Amazing Audio Engine 2中。
由Taylor Holliday提出,由Michael Tyson实现。
用法
使用Cocoapods:将"RealtimeWatchdog
" pod添加到您的Podfile中,并调用pod install
。完成!
在不使用Cocoapods的情况下
- 将RealtimeWatchdog.xcodeproj拖放到您的项目中。
- 选择您的应用程序目标的构建设置,打开“与库链接二进制”项,点击“+”按钮,选择libRealtimeWatchdog.a。完成。
如果您收到任何关于隐式依赖项的错误,您可能还需要打开“目标依赖项”项,并将RealtimeWatchdog添加到那里。
您可以通过注释掉AERealtimeWatchdog.h
中的#define REALTIME_WATCHDOG_ENABLED 1
行轻松禁用监视器。
该功能仅对调试构建有效,因此您可以安全地保留。
注意,对于64位设备和64位模拟器,该库提供了自己实现的objc_msgSend
封装,这意味着Objective-C方法调用会略微变慢。
有关实时线程安全性的更多讨论,请参阅以下文章:音频开发中的四个常见错误。
实时线程安全监视器许可
版权所有(C)2012-2016 A Tasty Pixel
该软件提供“原样”使用,不提供任何明示或暗示的保证。在任何情况下,作者都不会因使用该软件而承担任何责任。
允许任何人出于任何目的使用此软件,包括商业应用程序,并可自由修改和重新分发,但须遵守以下限制:
-
不得假冒该软件的来源;不得声称您编写了原始软件。如果将此软件用于产品中,产品文档中应表示感谢,但不是必需的。
-
更改后的源代码版本必须明确标记为修改版,并且不得虚假陈述其为原始软件。
-
本通知不得从任何源分发中删除或更改。