ABAddressBookRef 객체를 생성해서 사용한다.
이놈을 통해 Person 레코드도 그룹도 접근할 수 있다.
일반적인 조회는(풀스캔조차) 기가막히게 빠르고,
저장도 무척 빠르다. (안드로이드의 그것과 비교할 수 없다)
그런데, 이번에 연락처 프로젝트 하면서 골치 꽤나 썩었던 업데이트가 있는데
동기화 관련 프로세스였다. 잠깐 소개하자면,
update가 여의치 않아 기존 데이터를 remove하고 새로 insert하는 방식을 택했다.
연락처 풀스캔해서 찾아 remove, and insert하는 작업을 라이브러리 펑션으로 빼놨었다.
지우고, 저장...
아무리 봐도 그렇게 오래 걸릴만한 작업이 아닌데 3GS에서 10여초가 걸렸다 ;;
나중에 동료의 제안으로 수정을 했는데,
오래 걸리는 주된 원인은 ABAddressBookSave() 이놈이었다!
레코드(또는 그룹)를 삭제하거나, 추가한 뒤 변경사항을 최종 commit하는 놈인데
내 기억으로, 이놈이 거의 1초 가까이를 잡아먹었다..
해결은, ABAddressBookSave() 이놈을 함수 밖으로 빼서 한번만 커밋.
순식간에 서버에서 다운받은 연락처가 폰연락처에 후루룩 저장됐다. 쩐다~
요약 : 특별한 경우(!) 제외하고, record(group) 변경 후, 건건이 ABAddressBookSave()할 필요는 없다.
댓글 없음:
댓글 쓰기