我不知道这个问题是否有资格在这里,但即使经过这么多的研究,我找不到合适的问题指南.我希望我能在这里得到答案.
我看到所有的消息应用程序,如Viber,WhatsApp,Telegram都会获取用户联系人并快速有效地解析它们,几乎没有延迟.我试图复制它但从未成功过.通过在后台线程上运行整个操作来解析3000个联系人总是需要40-60秒的时间.即使这样也会导致UI在5和5S等较慢的设备上冻结.在获取联系人之后,我必须将它们发送到后端以识别在平台上注册了哪个用户,这也累计了总时间.上面提到的应用程序立即执行此操作!
如果有人可以建议一种方法以最有效和更快的方式解析联系人而不阻塞主线程,我会很高兴.
这是我现在使用的代码.
final class CNContactsService: ContactsService {
private let phoneNumberKit = PhoneNumberKit()
private var allContacts:[Contact] = []
private let contactsStore: CNContactStore
init(network:Network) {
contactsStore = CNContactStore()
self.network = network
}
func fetchContacts() {
fetchLocalContacts { (error) in
if let uError = error {
} else {
let contactsArray = self.allContacts
self.checkContacts(contacts: contactsArray, checkCompletion: { (Users) in
let nonUsers = contactsArray.filter { contact in
return !Users.contains(contact)
}
self.Users.value = Users
self.nonUsers.value = nonUsers
})
}
}
}
func fetchLocalContacts(_ …Run Code Online (Sandbox Code Playgroud)