Рассмотрим:
NSArray *allContacts = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
Функция, имя которой содержит Copy
, возвращает ссылку, которой владеет вызывающая сторона, что означает, что вызывающая сторона должна освободить ее. В ARC освобождение происходит автоматически, но вы должны сообщить ARC, что ссылка, возвращаемая этой функцией, принадлежит вызывающей стороне, поскольку в объявлении функции отсутствует эта информация. Это пример передачи права собственности, и вы должны использовать __bridge_transfer
в этом случае:
NSArray *allContacts = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
В
ABRecordRef person = [allContacts objectAtIndex:i];
-objectAtIndex:
возвращает объект, который не принадлежит вызывающей стороне. Так как вы назначаете этот объект не-объектному типу (ABRecordRef
), вам нужно простое приведение моста:
ABRecordRef person = (__bridge ABRecordRef)[allContacts objectAtIndex:i];