On 28 May 2013, at 5:50 AM, "Jacky.Seraph Mu" <jackyser...@gmail.com> wrote:

[On a Retina machine, after instantiating an NSWindow from a new window 
controller, an NSScreen pointer obtained earlier from another window/controller 
apparently is released, and the debugger shows funny values in its struct 
members. The backtrace identified with the screen release shows it happens in a 
cascade from an NSArray, which I'd wager is the static NSScreen screen list.]

Random comments, most of which are merely suggestive, and some of which you 
will say are obviously wrong-headed; but if everything you thought was 
impossible was in fact impossible, you wouldn't have a bug:

You don't outright say what the consequence of the strange behavior is. Do you 
crash? Where?

I'd not be surprised if NSScreen on HiDPI machines worked differently than on 
"normal" ones. The struct members aren't API, and don't necessarily mean what 
they obviously meant in earlier versions.

Are you using ARC?

If not, do you -retain the screen object while you are interested in it? It 
would be strange if the current autorelease pool were drained in the course of 
the code you show, but not impossible.

If you're not using ARC, have you tried zombie detection?

Have you run the application against the Allocations instrument, with full 
retain/release histories captured?

Does the other debugger (lldb vs gdb) help?

Just for grins, what do you get when you "po screen"? If it's still an 
NSScreen, or apparent subclass, overrelease isn't your problem.

Are you accessing the passed-in NSScreen pointer after the line you flag? How? 
Does it become "normal" then?

What do you get if you acquire a fresh NSScreen pointer? Compared to the new 
value? Compared to the one before the putative release?

I believe sending -window to your controllers will instantiate the windows. 
What leads you to believe that window.screen is valid at the time you call it? 
Is the window on-screen then?

This is wild even for me, but do you make _any_ changes to the display 
parameters between the time you acquire the pointer and the time you discover 
the fault? The API does not _promise_ that NSScreen objects will be per-screen 
singletons; a change in display configuration might result in the screen list 
being thrown away. (I'd be astonished if that were so, but there is no contract 
that it not be.)

        — F

-- 
Fritz Anderson
Xcode 4 Unleashed: 4.5 supplement for free!
http://www.informit.com/store/xcode-4-unleashed-9780672333279


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to