1
การใช้การนำเข้าข้อมูลหลักที่รวดเร็วและมีประสิทธิภาพบน iOS 5
คำถาม : ฉันจะทำให้บริบทลูกของฉันเห็นการเปลี่ยนแปลงที่ยังคงอยู่ในบริบทหลักได้อย่างไรเพื่อที่จะเรียก NSFetchedResultsController ของฉันเพื่ออัปเดต UI นี่คือการตั้งค่า: คุณมีแอปที่ดาวน์โหลดและเพิ่มข้อมูล XML จำนวนมาก (ประมาณ 2 ล้านระเบียนแต่ละรายการมีขนาดเท่ากับย่อหน้าปกติของข้อความ) ไฟล์. sqlite จะมีขนาดประมาณ 500 MB การเพิ่มเนื้อหานี้ลงในข้อมูลหลักต้องใช้เวลา แต่คุณต้องการให้ผู้ใช้สามารถใช้แอปได้ในขณะที่ข้อมูลโหลดลงในที่เก็บข้อมูลทีละน้อย ผู้ใช้จะต้องมองไม่เห็นและมองไม่เห็นว่ามีการเคลื่อนย้ายข้อมูลจำนวนมากไปรอบ ๆ จึงไม่แฮงค์ไม่กระวนกระวายใจ: เลื่อนเหมือนเนย ถึงกระนั้นแอปก็มีประโยชน์มากขึ้นยิ่งมีการเพิ่มข้อมูลมากขึ้นดังนั้นเราจึงไม่สามารถรอได้ตลอดไปเพื่อเพิ่มข้อมูลไปยังที่เก็บข้อมูลหลัก ในรหัสหมายความว่าฉันต้องการหลีกเลี่ยงรหัสเช่นนี้ในรหัสนำเข้า: [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.25]]; แอปนี้เป็น iOS 5 เท่านั้นดังนั้นอุปกรณ์ที่ช้าที่สุดที่ต้องรองรับคือ iPhone 3GS นี่คือแหล่งข้อมูลที่ฉันใช้ในการพัฒนาโซลูชันปัจจุบันของฉัน: คู่มือการเขียนโปรแกรมข้อมูลหลักของ Apple: การนำเข้าข้อมูลอย่างมีประสิทธิภาพ ใช้ Autorelease Pools เพื่อให้หน่วยความจำไม่ทำงาน ต้นทุนความสัมพันธ์ นำเข้าแบบแบนจากนั้นแก้ไขความสัมพันธ์ในตอนท้าย อย่าถามว่าคุณสามารถช่วยได้หรือไม่มันจะทำให้สิ่งต่างๆช้าลงในลักษณะ O (n ^ …