Saya menyimpan stempel waktu terakhir yang dimodifikasi dalam database pada catatan data inti di telepon, dan tabel mysql di server.
Ponsel mencari semua yang telah berubah sejak sinkronisasi terakhir dan mengirimkannya ke server bersama dengan stempel waktu sinkronisasi terakhir, dan server merespons dengan semua yang telah berubah sejak stempel waktu sinkronisasi yang disediakan.
Kinerja adalah masalah ketika banyak catatan telah berubah. Saya melakukan sinkronisasi pada NSOpeartion latar belakang yang memiliki konteks objek terkelolanya sendiri. Ketika utas latar belakang selesai membuat perubahan pada konteks objek terkelolanya, ada API untuk menggabungkan semua perubahan ke dalam konteks objek terkelola utas utama - yang dapat dikonfigurasi untuk membuang semua perubahan jika ada konflik yang disebabkan oleh pengguna mengubah data saat sinkronisasi berlangsung. Dalam hal ini, saya hanya menunggu beberapa detik dan kemudian mencoba melakukan sinkronisasi lagi.
Pada perangkat keras yang lebih lama bahkan setelah banyak pengoptimalan, sinkronisasi harus dibatalkan sepenuhnya jika pengguna mulai melakukan hal-hal di aplikasi. Itu hanya menggunakan terlalu banyak sumber daya sistem. Saya rasa perangkat iOS yang lebih modern mungkin cukup cepat sehingga Anda tidak perlu melakukannya lagi.
(omong-omong, ketika saya mengatakan "banyak catatan telah berubah" maksud saya 30.000 atau lebih baris diperbarui atau dimasukkan di telepon)