2011-07-26 67 views
3

我已经实现了选择器alertDidEnd:returnCode:contextInfo:。最后一个参数contextInfo是一个空指针。在调用方法之前,我将指针放在一起,如下所示。为什么我的Macruby指针不能作为void指针传递?

# 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不得不说这个。

谢谢!

回答

2

最可能的原因是没有任何东西保留这个对象,所以它会被垃圾收集。如果你创建一个对象并实现它的finalize方法并且在那里放置一个put,你将会看到情况是这样的。

尝试在正在创建工作表的控制器中跟踪您的状态,并将指针作为contextInfo传递给控制器​​。如果此状态调解UI元素之间的并发交互,则负责所有元素的控制器很可能需要跟踪它。当然,如果不传递contextInfo,并且使用哪个回调函数可以让工作表跟踪它在什么条件下被调用,可能会更容易。