3

我已经实现了选择器alertDidEnd:returnCode:contextInfo:。最后一个参数 contextInfo 是一个空指针。在调用该方法之前,我将指针放在一起如下。

# in windowShouldClose
p = Pointer.new(:boolean)
p.assign(true)

然后我调用该方法,它的主体内部有以下内容:

# in alertDidEnd
puts p[0] # => a number like 245
puts p.cast!('B')[0] # => false (rather than true)

我究竟做错了什么?这是因为调用方法(windowShouldClose)在这个选择器有机会(只是猜测)之前在它自己的线程中完成了吗?

或者我应该将指针创建为对象指针?

# make a pointer to an object and assign to it the instance of TrueClass
p = Pointer.new(:id)
p.assign(true)

我已经阅读了O'reilly Macruby Book对此的看法。

谢谢!

4

1 回答 1

2

最可能的原因是没有任何东西保留这个对象,所以它被垃圾收集了。如果您创建一个对象并实现它的 finalize 方法并在其中放置一个 puts,您将能够看到就是这种情况。

尝试在创建工作表的控制器中跟踪您的状态,并将指向控制器的指针作为 contextInfo 传递。如果此状态正在调解 ui 元素之间的并发交互,则很可能负责所有元素的控制器无论如何都需要跟踪它。当然,这样可能更容易不传递 contextInfo 并使用您为工作表提供的回调来跟踪它在什么条件下被调用。

于 2011-07-26T23:08:01.060 回答