gnustep-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: remove -removeSubview:


From: Quentin Mathé
Subject: Re: remove -removeSubview:
Date: Thu, 28 Apr 2011 18:39:58 +0200

Le 28 avr. 2011 à 06:56, Banlu Kemiyatorn a écrit :

> * Forgot not to modify the array during the enumeration.
> * Remove the extra subviews to improve the lookup speed on additions.
> 
> why it's _sub_views and not _subviews?

I don't know, but I have observed that various GNUstep classes written a long 
ago have ivars named in a similar way.

> - (void) setSubviews: (NSArray *)newSubviews
> {
>       NSEnumerator *en;
>       NSView *aView;
> 
>       en = [[NSArray arrayWithArray:_subviews] objectEnumerator];
>       while ((aView = [en nextObject]))
>       {
>               if (NO == [newSubviews containsObject:aView])
>               {
>                       [aView removeFromSuperview];
>               }
>       }
> 
>       NSMutableArray *uniqNew = [NSMutableArray array];
>       en = [newSubviews objectEnumerator];
>       while ((aView = [en nextObject]))
>       {
>               id supersub = [aView superview];
>               if (supersub != nil && supersub != self)
>               {
>                       [NSException raise:NSInvalidArgumentException
>                                   format:@"Superviews of new subviews must be 
> either nil or receiver."];
>               }
> 
>               if ([uniqNew containsObject:aView])
>               {
>                       [NSException raise:NSInvalidArgumentException
>                                   format:@"Duplicated new subviews."];
>               }
> 
>               if (NO == [_subviews containsObject:aView])
>               {
>                       [self addSubview:aView];
>               }
> 
>               [uniqNew addObject:aView];
>       }
> 
>       ASSIGN(_subviews, uniqNew);
> }

This looks ok. However I think this code doesn't match this requirement written 
in the Cocoa doc:
"And any views that are in both subviews and newSubviews are moved in the 
subviews array as needed, without being removed and re-added."

Cheers,
Quentin.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]