title: How useful is the -[NSObject isMemberOfClass:] method?
body: <p>Here's a small test program I wrote:</p>
  
  <pre><code>#import &lt;Foundation/Foundation.h&gt;
  
  int main(int argc, char **argv) {   
      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
      NSArray *arr = [NSArray array];
      printf("Arr isMemberOfClass NSArray: %d\n", [arr isMemberOfClass:[NSArray class]]);
      printf("Arr isKindOfClass NSArray: %d\n", [arr isKindOfClass:[NSArray class]]); 
  
      [pool release];
      return 0;
  }  
  </code></pre>
  
  <p>And its output:</p>
  
  <pre><code>$ ./ismemberof   
  Arr isMemberOfClass NSArray: 0   
  Arr isKindOfClass NSArray: 1   
  </code></pre>
  
  <p>How useful is the <code>-isMemberOfClass:</code> method in any of the Foundation classes? I understand this might give the desired results for classes which I subclass, but as for Foundation classes -- I find that a result of false for my arr variable is non-intuitive. Is the reason this happens because NSArray is not a concrete class but instead an abstract class, and underneath the hood NSArray is really a concrete instance of NSCFArray?</p>