title: What use cases are there for defining a new root class?
body: <p>We know that in Objective-C there are two main root classes:  <code>NSObject</code> and <code>NSProxy</code>.  There are other roots (mainly for private and legacy purposes) like <code>Object</code>, and <code>NSLeafProxy</code>.</p>
  
  <p>Defining a new root is fairly trivial:</p>
  
  <pre><code>@interface DDRoot &lt;NSObject&gt;
  
  @end
  
  @implementation DDRoot
  
  //implement the methods required by &lt;NSObject&gt;
  
  @end
  </code></pre>
  
  <p>My question is: why would you ever want to define a new root class?  Is there some use-case where it's necessary?</p>