This was a beginner's problem. In the drawRect method
- (void)drawRect:(NSRect)dirtyRect
I used the dirtyRect parameter to draw the outline of my view, assuming these were the borders of the view, where in reality it was just the area around the buttons that became dirty when clicked. The "artifacts" were actually my contours made in the wrong place.
Properly using view boundaries
NSRect drawingRect = [self bounds];
"artifacts" no longer appeared.
source share