gpt4 book ai didi

objective-c - 加载 dylib 时垃圾收集工作队列崩溃

转载 作者:太空狗 更新时间:2023-10-30 03:22:22 25 4
gpt4 key购买 nike

我们正在将应用程序从 10.6 移植到 10.8。我正在查看我们在应用程序中加载的 dylib。我在 Garbage Collection Work Queue 中遇到非常不寻常的崩溃,并显示以下消息。

malloc: Thread::suspend():  unable to suspend a thread:  err = 268435459, Thread 0x111000000: _pthread = 0x108129000, _thread = 0x8b07, _stack_base = 0x108129000, enlivening  on, 0 local blocks

对于应用程序 GCC_ENABLE_OBJC_GC = required 已设置。如果我在 dylib 中有 GCC_ENABLE_OBJC_GC = required 它仍然会崩溃。我无法在应用程序中关闭垃圾收集器。我必须通过我的 dylib 来解决它的崩溃问题。

崩溃的原因原来是垃圾收集器无法挂起线程。 (正如它在日志中所说)。此线程是使用 thread_create() 创建的.如果我在 dylib 的构造函数中放置一个不确定的 while 循环(带 sleep ),我不会崩溃。当构造函数完成执行时我崩溃了。

他们是告诉垃圾收集器不要尝试挂起线程的方法吗?或者增加线程的引用计数?或者我可以做的任何事情来阻止垃圾收集器不干扰我的 dylib 代码。

最佳答案

It is expected. 
Starting with OSX 10.8, Garbage collection is deprecated. So CG is unable to suspend the threads to perform its duty. As a result you get all the issues you are facing.

If you want to develop for 10.8, you need to convert to ARC (best) or move back to manual reference counting. If you wish to move to arc, see Transitioning to ARC Release Notes

来自关于 10.8 的 Apple 文档:

重要提示:从 OS X v10.8 开始,垃圾回收已被弃用。请改用 ARC(自动引用计数)。要了解有关 ARC 的更多信息,请参阅过渡到 ARC 发行说明。

https://books.google.co.in/books?id=8nzwsciij20C&pg=PT431&lpg=PT431&dq=Crash+of+Garbage+Collection+Work+in+objective+c&source=bl&ots=xTjLETFMsO&sig=b33rLeXJVh1WtnAvcVJykfNtvOU&hl=en&sa=X&ved=0ahUKEwiyqZrC2rvNAhVKNI8KHZRdC7AQ6AEIKDAC#v=onepage&q=Crash%20of%20Garbage%20Collection%20Work%20in%20objective%20c&f=false

关于objective-c - 加载 dylib 时垃圾收集工作队列崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14817070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com