title: About protocols in Objective-C
body: <p>I have some questions about protocols in OBJ-C.
  I often see lines that declare an id object with a protocol, for example:</p>
  
  <pre><code>- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  {
  
      id  &lt;NSFetchedResultsSectionInfo&gt; secInfo = [[self.fetchedResultsController sections]objectAtIndex:section];
      NSLog(@"%i",[secInfo numberOfObjects]);
      return [secInfo numberOfObjects];
  }
  </code></pre>
  
  <p>I don't understand the following line at all:</p>
  
  <pre><code>id  &lt;NSFetchedResultsSectionInfo&gt; secInfo = [[self.fetchedResultsController sections]objectAtIndex:section];
  </code></pre>
  
  <ol>
  <li>What does " id   " mean?</li>
  <li>What object does "objectAtIndex:section" return?</li>
  <li>Why can I call "[secInfo numberOfObjects]" on the object?
  I mean, How's the method numberOfObjects exists?</li>
  </ol>
  
  <p>I'm trying to lean CoreData but I can't actually continue without understanding this.
  Thank you.</p>