[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