由于垃圾收集器禁用,无法运行 Cocoa UnitTests

Posted

技术标签:

【中文标题】由于垃圾收集器禁用,无法运行 Cocoa UnitTests【英文标题】:Can't run Cocoa UnitTests because of Garbage Collector disabling 【发布时间】:2010-08-26 14:44:30 【问题描述】:

我正在尝试将一些单元测试添加到一堆 Cocoa Legacy 代码中。 我创建了一个单元测试包,并添加了所需的所有源代码和框架,但构建失败并显示以下消息:

2010-08-26 16:07:18.074 otest-x86_64[64675:903] 测试包位于 /Users/giordano/application/build/Release/UnitTest.octest 无法加载,因为其 Objective-C 运行时信息不匹配 测试台所需的运行时信息。这可能是因为 测试台在禁用 Objective-C 垃圾收集的情况下运行,但是 测试包需要 Objective-C 垃圾回收。启用 Objective-C 测试台的垃圾收集,在没有 OBJC_DISABLE_GC 环境变量。

我尝试启用垃圾收集器,但出现另一个错误:

2010-08-26 16:38:28.824 otest-x86_64[71383:903] 测试包位于 /Users/giordano/work/CleanCode/Pomodori.st/desktop/Osx/pomodoro- 无法加载 buildfix/pomodoro/build/Release/UnitTest.octest 因为发生了意外错误:Error Domain=NSCocoaErrorDomain 代码=3587 UserInfo=0x20002a640“捆绑包“UnitTest.octest”不能 加载,因为它已损坏或缺少必要的资源。” (dlopen_preflight(/Users/giordano/application/build/Release/UnitTest.octest/Contents/MacOS/UnitTest):库未加载: @loader_path/../Frameworks/Sparkle.framework/Versions/A/Sparkle 参考自: /Users/giordano/application/build/Release/UnitTest.octest/Contents/MacOS/UnitTest 原因:没有找到合适的图片。发现: /Users/giordano/application/build/Release/UnitTest.octest/Contents/MacOS/../Frameworks/Sparkle.framework/Versions/A/Sparkle: GC 能力不匹配 /Users/giordano/application/build/Release/UnitTest.octest/Contents/MacOS/../Frameworks/Sparkle.framework/Versions/A/Sparkle: GC 能力不匹配)

我想知道是否可以强制单元测试在没有垃圾收集的情况下运行: 有什么线索吗?

【问题讨论】:

【参考方案1】:

sparkle 框架需要构建启用 GC。

【讨论】:

一切都必须启用 GC 或 Retain-Release。你不能混。我对您的项目了解得不够多,不知道哪个是正确答案。

以上是关于由于垃圾收集器禁用,无法运行 Cocoa UnitTests的主要内容,如果未能解决你的问题,请参考以下文章

禁用relayjs垃圾收集

关闭D垃圾收集器

Java内存管理——垃圾收集

确定JVM垃圾收集器的运行时

基于PHP Memcache(d)的会话:是否应禁用垃圾收集?

由于频繁的垃圾收集导致服务吞吐量低