@interface NSArrayController : NSObjectController {
@private
void *_reserved4;
id _rearrangementExtensions;
NSMutableArray *_temporaryWorkObjects;
NSUInteger _observedIndexHint;
NSMutableIndexSet *_selectionIndexes;
NSMutableArray *_objects;
NSIndexSet *_cachedSelectedIndexes;
NSArray *_cachedSelectedObjects;
NSArray *_arrangedObjects;
}
If you look at NSArrayController's header, the instance variable for arrangedObject is a NSArray, so it will have to create a new array whenever you add a new object and is a normal behaviour.