title: Why don't I need to CFRetain() the result of ABAddressBookGetPersonWithRecordID() in this code
body: <p>I'm trying to work with the adress book, but my understanding of memory management is so-so at best.</p>
  
  <p>My project is using Automatic Reference Counting (ARC), but as I've learned, ARC only manages retain/release in Objective-C land.</p>
  
  <p>I understand that my first function call: <code>ABAddressBookCreate()</code> returns an ABAddressBookRef that I "own", because I'm getting it from a method with <code>Create</code> in the name.  I <code>CFRelease</code> it when I'm done with it.</p>
  
  <p><strong>What I don't understand</strong> is how the ABRecordRef stays alive during the course of this method.  Shouldn't I have to <code>CFRetain</code> and <code>CFRelease</code> it?   I have another nearly identical method in the same class that was crashing if I didn't retain/release the <code>ABAddressBookRef</code>.</p>
  
  <pre><code>    ABAddressBookRef iPhoneAddressBook = ABAddressBookCreate();    
      ABRecordRef record = ABAddressBookGetPersonWithRecordID(iPhoneAddressBook, self.addressBookRecordID);
  
      NSString *firstName = (__bridge_transfer NSString*)ABRecordCopyValue(record, kABPersonFirstNameProperty);
      NSString *lastName = (__bridge_transfer NSString*)ABRecordCopyValue(record, kABPersonLastNameProperty);
      NSString *fullName = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
  
      ABMultiValueRef phoneRef = ABRecordCopyValue(record, kABPersonPhoneProperty);
  
      // Set up an NSArray and copy the values in.
      NSArray *phoneNumberArray = (__bridge_transfer id)ABMultiValueCopyArrayOfAllValues(phoneRef);
  
  
      CFRelease(iPhoneAddressBook);
  
      // Finally, do stuff with contact information in Obj-C land..
  </code></pre>
  
  <p><strong>Exit question</strong>: have I created a leak by not calling <code>CFRelease</code> with my <code>ABMultiValueRef phoneRef</code> on the last line?</p>