title: ios memory leak when accessing phone book
body: <p><img src="https://i.stack.imgur.com/TLGcI.png" alt="screen"></p>
  
  <pre><code>- (NSArray *)getAllContacts{
  
      CFErrorRef *error = nil;
  
  
      ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
  
      __block BOOL accessGranted = NO;
      if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6
          dispatch_semaphore_t sema = dispatch_semaphore_create(0);
          ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
              accessGranted = granted;
              dispatch_semaphore_signal(sema);
          });
          dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
  
      }
      else { // we're on iOS 5 or older
          accessGranted = YES;
      }
  
      if (accessGranted == YES) {
  
  #ifdef DEBUG
          NSLog(@"Fetching contact info ----&gt; ");
  #endif
  
  
          ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
          ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
          CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName);
          CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
          NSMutableArray* items = [NSMutableArray arrayWithCapacity:nPeople];
  
  
          for (int i = 0; i &lt; nPeople; i++)
          {
              ContactsData *contacts = [ContactsData new];
  
              ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
  
              //get First Name and Last Name
  
              contacts.firstNames = (__bridge NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);
  
              contacts.lastNames =  (__bridge NSString*)ABRecordCopyValue(person, kABPersonLastNameProperty);
  
              if (!contacts.firstNames) {
                  contacts.firstNames = @"";
              }
              if (!contacts.lastNames) {
                  contacts.lastNames = @"";
              }
  
              // get contacts picture, if pic doesn't exists, show standart one
  
              //            NSData  *imgData = (__bridge NSData *)ABPersonCopyImageData(person);
              //            contacts.image = [UIImage imageWithData:imgData];
              //            if (!contacts.image) {
              //                contacts.image = [UIImage imageNamed:@"NOIMG.png"];
              //            }
              //            //get Phone Numbers
              //
              //            NSMutableArray *phoneNumbers = [[NSMutableArray alloc] init];
              //
              //            ABMultiValueRef multiPhones = ABRecordCopyValue(person, kABPersonPhoneProperty);
              //            for(CFIndex i=0;i&lt;ABMultiValueGetCount(multiPhones);i++) {
              //
              //                CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(multiPhones, i);
              //                NSString *phoneNumber = (__bridge NSString *) phoneNumberRef;
              //                [phoneNumbers addObject:phoneNumber];
              //
              //                //NSLog(@"All numbers %@", phoneNumbers);
              //
              //            }
  
  
              //            [contacts setNumbers:phoneNumbers];
  
              //get Contact email
  
              NSMutableArray *contactEmails = [NSMutableArray new];
              ABMultiValueRef multiEmails = ABRecordCopyValue(person, kABPersonEmailProperty);
  
              for (CFIndex i=0; i&lt;ABMultiValueGetCount(multiEmails); i++) {
                  CFStringRef contactEmailRef = ABMultiValueCopyValueAtIndex(multiEmails, i);
                  NSString *contactEmail = (__bridge NSString *)contactEmailRef;
  
                  [contactEmails addObject:contactEmail];
                  // NSLog(@"All emails are:%@", contactEmails);
  
              }
  
              [contacts setEmails:contactEmails];
  
  
              //---- if no mail id found then dont add contact
              if (contactEmails &amp;&amp; contactEmails.count != 0) {
                  [items addObject:contacts];
              }
  
  
  #ifdef DEBUG
              //            NSLog(@"Person is: %@ # %@", contacts.firstNames,contacts.lastNames);
              //            NSLog(@"Phones are: %@", contacts.numbers);
              //            NSLog(@"Email is:%@", contacts.emails);
  #endif
  
  
  
  
          }
          return items;
  
  
  
      } else {
  #ifdef DEBUG
          NSLog(@"Cannot fetch Contacts :( ");
  #endif
          return nil;
  
  
      }
  
  }
  </code></pre>
  
  <p>crash log:
  Aug  6 19:11:08 IPad  : Fetching contact info ----> </p>
  
  <p>Aug  6 19:11:08 IPad  : (Warn ) [ABLog]:  Actual default source doesn't exist</p>
  
  <p>Aug  6 19:11:57 IPad com.apple.debugserver-310.2[449] : Got a 'k' packet, killing the inferior process.</p>
  
  <p>Aug  6 19:11:57 IPad com.apple.debugserver-310.2[449] : Sending ptrace PT_KILL to terminate inferior process.</p>
  
  <p>Aug  6 19:11:57 IPad com.apple.debugserver-310.2[449] : 38 +82.923904 sec [01c1/060b]: error: ::ptrace (request = PT_THUPDATE, pid = 0x01c2, tid = 0x2603, signal = 0) err = Resource busy (0x00000010)</p>
  
  <p>Aug  6 19:11:57 IPad com.apple.debugserver-310.2[449] : 39 +0.005248 sec [01c1/060b]: error: ::task_info ( target_task = 0x1c0b, flavor = TASK_BASIC_INFO, task_info_out => 0x27d93d48, task_info_outCnt => 8 ) err = (os/kern) invalid argument (0x00000004)</p>
  
  <p>Aug  6 19:11:57 IPad com.apple.launchd<a href="https://i.stack.imgur.com/TLGcI.png" rel="nofollow noreferrer">1</a> (UIKitApplication:com.baltech.gaurav[0x7f50][450]) : (UIKitApplication:com.baltech.gaurav[0x7f50]) Exited: Killed: 9</p>
  
  <p>Aug  6 19:11:57 IPad com.apple.debugserver-310.2[449] : Waited 20 ms for process to be reaped (state = Exited)</p>
  
  <p>Aug  6 19:11:57 IPad com.apple.debugserver-310.2[449] : 40 +0.025414 sec [01c1/1207]: error: ::read ( -1, 0x4089ec, 18446744069414585344 ) => -1 err = Bad file descriptor (0x00000009)</p>
  
  <p>Aug  6 19:11:57 IPad com.apple.debugserver-310.2[449] : Exiting.</p>
  
  <p>Aug  6 19:11:57 IPad backboardd[28] : Application 'UIKitApplication:com.baltech.gaurav[0x7f50]' exited abnormally with signal 9: Killed: 9</p>
  
  <p>--
  thanks in advance</p>