2011-07-26 68 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,並且使用哪個回調函數可以讓工作表跟蹤它在什麼條件下被調用,可能會更容易。