gpt4 book ai didi

Rubymotion Dispatch 提前退出

转载 作者:行者123 更新时间:2023-12-01 16:40:25 28 4
gpt4 key购买 nike

我正在 Rubymotion 中执行一个相当普通的调度队列,但它显然提前退出了。它永远不会通过 initWithContentsOfURL 调用。但是,删除 Dispatch::Queue 包装器并将调用放在主线程中是可行的。

模拟器中的应用程序退出时没有堆栈跟踪或错误指示。我是否误用了调度队列?

def foo
Dispatch::Queue.concurrent.async do
error_ptr = Pointer.new(:object)
data = NSData.alloc.initWithContentsOfURL(
NSURL.URLWithString(url), options:NSDataReadingUncached, error:error_ptr)
unless data
p error_ptr[0]
return
end
json = NSJSONSerialization.JSONObjectWithData(data, options:0, error:error_ptr)
unless json
presentError error_ptr[0]
return
end
Dispatch::Queue.main.sync { print_results(json) }
end
end

def print_results(json)
p "#{json}"
end

最佳答案

现在看来 RubyMotion 没有正确地保留分派(dispatch) block 外的局部变量,所以可能会收到 EXEC_BAD_ACCESS 并崩溃。以下失败:

foo = "some value"
Dispatch::Queue.concurrent.async do
puts foo
end

但是以下两个起作用:

@foo = "some value"
Dispatch::Queue.concurrent.async do
puts @foo
end

还有:

foo = "some value"
foo.retain
Dispatch::Queue.concurrent.async do
puts foo
foo.release
end

关于Rubymotion Dispatch 提前退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10815972/

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