У меня есть приложение, в котором я отфильтровываю дублирующиеся контакты. Я достиг функциональности, но проблема в том, что это быстро для нескольких контактов, так как контакты загружаются чаще, и становится медленнее.Ниже приведен блок кода, который я использую
-(void)loadDuplicateContacts{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[addressBook loadContacts:^(NSArray<APContact *> * _Nullable contacts, NSError * _Nullable error) {
NSMutableArray *duplucateDataArray = [[NSMutableArray alloc] init];
duplucateDataArray = [contacts mutableCopy];
duplicateContactsArray = [[NSMutableArray alloc] init];
duplicateContactsDictinary = [[NSMutableDictionary alloc] init];
self.dictionaryKeys = [NSArray new];
for (APContact *contact in duplucateDataArray) {
NSMutableArray *countArray = [[NSMutableArray alloc] init];
[duplucateDataArray enumerateObjectsUsingBlock:^(APContact *obj, NSUInteger idx, BOOL *stop)
{
if ([JustNumber([obj.phones[0] number]) isEqualToString:JustNumber([contact.phones[0] number])])
{
[countArray addObject:contact.name.compositeName];
}
}];
if (countArray.count > 1) {
if (duplicateContactsDictinary[JustNumber([contact.phones[0] number])]) {
NSMutableArray *retriveArray = [[NSMutableArray alloc] init];
retriveArray = [duplicateContactsDictinary objectForKey:JustNumber([contact.phones[0] number])];
[retriveArray addObject:contact];
[duplicateContactsDictinary setObject:retriveArray forKey:JustNumber([contact.phones[0] number])];
}else{
NSMutableArray *contactCreationArray = [[NSMutableArray alloc] init];
[contactCreationArray addObject:contact];
[duplicateContactsDictinary setObject:contactCreationArray forKey:JustNumber([contact.phones[0] number])];
}
[duplicateContactsArray addObject:contact];
}
}
dispatch_async(dispatch_get_main_queue(), ^(void) {
[self.tableView reloadData];
});
}];
});
}
Любые предложения будут более полезными