On Dec 1, 2014, at 1:08 PM, Andreas Höschler <[email protected]> wrote:
> Hi Kyle,
>
>>> Adding
>>>
>>> #ifdef __APPLE__
>>> - (void)setWindow:(NSWindow *)window
>>> {
>>> }
>>> #endif
>>>
>>> to my GSScrollView : NSScrollView subclass fixed (or at least worked
>>> around) the issue (no exception anymore and no apparent malfunction of the
>>> app).
>>
>> WOAAAAAHHHH. This is NOT the way to solve this problem!
>
> Of course not!! But it at least makes the application available for the time
> being (needed to be urgently fixed or at least worked around).
>
>> NSView and NSScrollView (may) do important work in -setWindow:! You just
>> haven't noticed what you’ve broken yet.
>
> I have posted the methods and ivars I have added to my subclasses. I can't
> see any obvious conflict with Apples API modifications!? And the app crashes
> in setWindow!? I see it that way. Apples implementation of
> NSScrollView::setWindow looks probably similar to this:
>
> - (void)setWindow:(NSWindow *)window
> {
> // remove observer for _window::contentLayoutRect
> [_window release];
> _window = [window retain];
> ...
> // add observer for _window::contentLayoutRect
> }
>
> Do you agree?
No, because that's a really bad design pattern. It can bite you if you aren't
careful - if, say, you don't call setters in dealloc because of KVO-triggered
side effects, or anything else where the window's dealloc is called when you
don't expect it. (Also I expect it's using ARC)
Since you can add observers on keypaths, I would do
[self addObserver:self forKeypath:@"window.contentLayoutRect"...
instead of
[window addObserver:self forKeypath:@"contentLayoutRect"...
And also, because it fits the behavior I've seen in other Apple bugs, the
problem might be that there's not a "setWindow:nil" in there when it's all done
- I have seen things that indicate they don't set delegates to nil, and since
delegate is a weak ref, that means it can be dead and still referenced. Fine if
everything is ARC, but not so good when there's a mix.
_______________________________________________
Cocoa-dev mailing list ([email protected])
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 [email protected]