[MacRuby-devel] Behaviour when local variables pointing to non-auto-retained objects go out of scope?

Laurent Sansonetti lsansonetti at apple.com
Wed Jan 6 21:25:47 PST 2010


FYI, the alloc.init pattern is correct in MacRuby too.

As in pure Objective-C, calling +new in MacRuby is a shortcut for  
+alloc and -init. Doing +new then -initWithContentsOfFile will result  
in initializing the object twice, probably not what you want.

Laurent

On Jan 5, 2010, at 1:52 AM, Michael Johnston wrote:

> Note that I'm aware {{{ image = NSImage.alloc.initWithContentsOfFile 
> ("stretch.tiff") }}} should be {{{ image =  
> NSImage.new.initWithContentsOfFile("stretch.tiff") }}}, I just  
> forgot to change back one of my experiments. It doesn't affect  
> anything in this example though.
>
> Cheerio,
>
> Michael Johnston
> lastobelus at mac.com
>
>
>
>
> On 5-Jan-10, at 1:30 AM, Michael Johnston wrote:
>
>> I just purchased the book Programming Cocoa with Ruby, and am  
>> working through the examples using Macruby.
>>
>> This tiny app works fine in rubycocoa, but in macruby the created  
>> statusbar item immediately disappears.
>>
>> {{{
>> #!/usr/bin/env macruby
>> framework 'cocoa'
>>
>> class App
>> def applicationDidFinishLaunching(aNotification)
>>   statusbar = NSStatusBar.systemStatusBar
>>   status_item = statusbar.statusItemWithLength 
>> (NSVariableStatusItemLength)
>>
>>   image = NSImage.alloc.initWithContentsOfFile("stretch.tiff")
>>   raise "Icon file 'stretch.tiff' is missing." unless image
>>
>>   status_item.setImage(image)
>> end
>> end
>>
>> NSApplication.sharedApplication
>> NSApp.delegate = App.new
>> NSApp.run
>>
>> }}}
>>
>> I assumed this had to do with garbage collection because in obj C  
>> status_item would have to be retained, and so I changed  
>> "status_item" to "@status_item"  and then it works fine.
>>
>> However while playing around with it I also noticed that if I leave  
>> status_item as a local var and add a "sleep 1" at the end of  
>> applicationDidFinishLaunching, it also works fine and the status  
>> item never disappears.
>>
>> So now I'm not sure whether there is a bug or not. In general, what  
>> is the intended behaviour of Macruby with local variables referring  
>> to objects that would have to be retained in obj C when said  
>> variables go out of scope?
>> Cheerio,
>>
>> Michael Johnston
>> lastobelus at mac.com
>>
>>
>>
>>
>> _______________________________________________
>> MacRuby-devel mailing list
>> MacRuby-devel at lists.macosforge.org
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel



More information about the MacRuby-devel mailing list