What is the difference in the definition between a base class and a root class?
base class root class
A base class is an ancestor class (i.e. parent, grandparent, great-grandparent, etc). A root class is a class that doesn't have any ancestors.
In Objective-C, you can define multiple root classes if you want. Typically you inherit from a single root via NSObject, but there are cases (NSProxy) that have a different hierarchy. In Swift, I'm not sure the concept of a root class (as a "special" thing) is really used, since it's common for a class not to have a parent, and there's nothing very special about that situation.