like title通过电话号码在设备地址簿中查找联系人的最佳和有效方法是什么?实际上我使用的方法是这样的:
注意:[rm getElencoContatti]
返回地址簿中的所有联系人[contatto getID]
从地址簿返回联系人id [contatto getNumeriContatto]
返回地址簿中所有联系人的电话号码
+(NSMutableDictionary *)getNomeContattoDaNumero:(NSString *)numeroTelefono {
NSMutableDictionary *returnValue = [[NSMutableDictionary alloc]init];
NSNumber *idContact;
for(ContattoRubrica *contatto in [rm getElencoContatti]) {
idContact = [contatto getID];
for(id numero in [contatto getNumeriContatto]) {
if([numeroTelefono isEqualToString:[numero objectForKey:@"numeroTelefono"]]) {
[returnValue setValue:[contatto getNomeContatto] forKey:@"nome"];
[returnValue setValue:idContact forKey:@"idContatto"];
return returnValue;
}
}
}
[returnValue setValue:numeroTelefono forKey:@"nome"];
[returnValue setValue:[NSNumber numberWithInt:-1] forKey:@"idContatto"];
return returnValue;
}
我用大约200个联系人的地址簿测试了这个方法,这个功能非常慢。是否存在任何ABAddressbook.h方法可以自动执行此操作?
iOS上的ABAddressBook
提供的搜索工具比Mac OS上的等效API少。不幸的是,过滤联系人需要线性扫描,就像你上面展示的那样。苹果的文档包含了一种稍微不同的方法,使用基于块的谓词,但它基本上等同于你在这里所做的。
一个可能的加速是避免构造所有ContattoRubrica
对象,直到您执行搜索并找到(或未找到)匹配的ABPerson
记录之后。在任何情况下,您都应该使用Instruments来确定代码在哪里花费了大部分时间。