----- Original message -----
> > * 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.

Im still not sure why it is not. I thought of that case, only views that werent 
shared by both arrays will either be added or removed, else they only got 
sorted and assigned back as uniqNew.
_______________________________________________
Gnustep-dev mailing list
Gnustep-dev@gnu.org
https://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to