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. _______________________________________________ Gnustep-dev mailing list Gnustep-dev@gnu.org https://lists.gnu.org/mailman/listinfo/gnustep-dev