我编写了如下代码,用于从地址簿中删除所有联系人。但对于超过 1000 个联系人,它的运行速度非常慢。有没有其他方法可以从地址簿中删除所有联系人。我需要它来恢复我的应用程序中的备份。
-(void)removeAllData
{
ABAddressBook *book = [ABAddressBook sharedAddressBook];
int count = [[book people] count];
for(int i=count;i>=0;i--)
{
if(i<[[book people] count])
{
[book removeRecord:[[book people] objectAtIndex:i]];
}
}
[book save];
}
最佳答案
您可以首先在整个循环中只检索一次书中的人物,而不是每次迭代两次,然后通过使用 fast enumeration 直接在数组上循环来进一步改进这一点。而不是通过索引访问对象:
NSArray *people = [book people];
for (ABPerson *person in people)
[book removeRecord:person];
[book save];
您还应该在 Instruments 中分析您的应用程序,看看还有什么可能占用您大量的时间。我预测(但您应该自己确认这一点)如果您分析当前的代码,[book people]
将显示为热点,因为您调用它的次数太多(2000 次) >计数 == 1000
)。
(我假设您有充分的理由清空地址簿......)
关于objective-c - 如何使用AddressBook框架有效地从AddressBook中删除所有联系人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3083624/