2009-08-12 7 views
6

मैं एक आईफोन एप्लिकेशन विकसित कर रहा हूं जो कोर डेटा का भारी उपयोग करता है, मुख्य रूप से इसके डेटाबेस जैसी सुविधाओं के लिए (जैसे सॉर्ट ऑर्डर सेट करने या लाने के अनुरोध पर भविष्यवाणी करने की क्षमता)। मैं विभिन्न UITableViewControllers में लाने वाले सभी डेटा प्रस्तुत कर रहा हूं।कोको टच: कोर डेटा लाने का प्रबंधन करने के लिए एक NSFetchedResultsController कब आवश्यक हो जाता है?

मैं क्या जानना चाहता हूं कि अनुरोध को संभालने के लिए NSFetchedResultsController का उपयोग करने के लिए एक अच्छा विचार बनने से पहले मैं कितनी ऑब्जेक्ट ला सकता हूं। कोर डेटा डॉक्स में, यह कहता है कि SQLite स्टोर्स "10,000 ऑब्जेक्ट्स को काफी छोटा डेटा सेट मानते हैं," पर विचार करते हैं, लेकिन NSFetchedResultsController के लिए प्रलेखन में यह एक समय में स्मृति में "ऑब्जेक्ट्स के दस" रखने का उल्लेख करता है।

मैं मुख्य रूप से पचास वस्तुओं तक के डेटा सेट के साथ काम कर रहा हूं जिसमें प्रत्येक के पास NSNumber और NSString के दर्जनों उदाहरण हैं, साथ ही साथ अगले सेट ऑब्जेक्ट्स के लिए एक से अधिक संबंध हैं (यानी बीस हैं ऑब्जेक्ट ए के उदाहरण, जिनमें से प्रत्येक ऑब्जेक्ट बी के तीस (विशिष्ट) उदाहरणों के सेट से बहुत से संबंध हैं, जिनमें से प्रत्येक ...)।

क्या यह परिदृश्य NSFetchedResultsController का उपयोग करने के लिए एक अच्छा फिट है, या क्या मैं परिणामों के एक साधारण एनएसएआरएआरई से दूर हो सकता हूं? मुझे नियंत्रक की नब्बे के दशक के प्रबंधन के साथ कोई समस्या नहीं है (UITableView अनुक्रमणिका पथ के लिए ऑब्जेक्ट प्राप्त करने के लिए सुविधा विधियां, संदर्भ में वापस नई ऑब्जेक्ट्स जोड़ना आदि) स्वयं, मैं बस स्मृति उपयोग के बारे में सोच रहा हूं प्रत्येक दृष्टिकोण।

मुझे यह उल्लेख करना चाहिए कि ऐप को मुख्य रूप से आईफोन 3 जी (एस नहीं) और प्रथम-जनरल आइपॉड टच उपयोगकर्ताओं पर लक्षित किया जाएगा, इसलिए कृपया इन प्लेटफॉर्म की सीमित स्मृति को ध्यान में रखें।

उत्तर

11

NSFetchedResultsController आपके UITableViews के साथ कोर डेटा इंटरफ़ेस करने के लिए एक अविश्वसनीय रूप से आसान सहायक वर्ग है। मेरी सिफारिश का उपयोग प्रत्येक तालिका दृश्य के साथ करना होगा जिसमें कोर डेटा बैकिंग है। हर मामले में मैंने इसका उपयोग किया है, यह मुझे उस कोड की मात्रा को काफी कम करता है जिसे मुझे लिखना था।

प्रदर्शन के अनुसार, इससे भी एक बड़ा सुधार हो सकता है। अपने पूरे डेटा सेट में लाने के बजाय, यदि आप -setFetchBatchSize का उपयोग करते हैं: NSFetchRequest के साथ जो आप NSFetchedResultsController में फ़ीड करते हैं, तो आप बैच किए गए बैचिंग कर सकते हैं जहां आपके तालिका दृश्य में केवल प्रासंगिक डेटा प्रदर्शित किया जा रहा है। डिस्प्ले पर डेटा अब स्वचालित रूप से स्मृति से हटाया जा सकता है (या मेरी समझ भी है)।

मध्यम से बड़े डेटा सेट वाले तालिकाओं के लिए, इससे महत्वपूर्ण प्रदर्शन जीत हो सकती है। ऐप्पल इंजीनियरों को यह कहते हुए उद्धृत किया गया है कि 10,000 आइटम डेटाबेस के लिए, यह आपके स्टार्टअप समय को 80% से अधिक और आपकी मेमोरी उपयोग 50% तक कम कर सकता है।

+1

मैं इसे दूसरा करता हूं, और इसे पर्याप्त अनुशंसा नहीं कर सकता। मैं कोरडाटा के साथ अपने ऐप को दोबारा लिखने की प्रक्रिया में हूं, और मैंने एक FetchedResultsController का उपयोग करके भारी लाभ देखा है। – jbrennan

+0

सिवाय इसके कि मुझे व्यक्तिगत रूप से fetchResultsController के साथ डेटा सेट लोड करने में समस्याएं आई हैं और अभी तक इसके लिए वाउच नहीं करेंगे। ऐसा लगता है कि यह उनके द्वारा पेजिंग करते समय उचित रूप से निकाला जाता है और लगता है कि नरक लग रहा है क्योंकि यह उन्हें लोड करता है। – TheCodingArt

संबंधित मुद्दे