ios - Xcode - How to draw a View using thread? -


मेरे पास ग्राफिक दृश्य है जो कि - (शून्य) ड्रॉरेक्टेक्स्ट का उपयोग करके खींचा गया है: (सीजीआरईएक्ट) रीसेट फ़ंक्शन , यह एक छोटा जटिल ग्राफिक है जिसमें दिनांक X अक्ष और Y अक्ष के रूप में दिनांक शामिल है। तो हर बार जब मैं इसे खींचना करता हूं, तो अंतिम ग्राफ़िक को प्रदर्शित करने में हमेशा 2, 3 सेकंड लगते हैं। लाल बिंदु शायद लाल, हरा या पीला हो, इसका रंग डेटा बेस से पढ़ा डेटा पर निर्भर करता है।

मेरा प्रश्न यह है कि कैसे multithread का उपयोग करके या उपवास में इस दृश्य को आकर्षित करना है मार्ग। उदाहरण के लिए, एक्स अक्ष और वाई अक्ष को एक धागे में खींचें, और प्रत्येक दिन के ग्राफिक को अलग थ्रेड में (30 धागे का उपयोग करके) आकर्षित करें या प्रत्येक थ्रेड को 30 दिनों के ग्राफिक्स के लिए पृथक धागे में (5 धागे का उपयोग करके) खींचना है? मैंने निम्न फ़ंक्शन उपयोग करने की कोशिश की है:

  के लिए (इंट i = 0; i & lt; 31; i ++) {NSString * threadStr = [NSString stringWithFormat: @ "% i", i]; Dispatch_queue_t queue1 = dispatch_queue_create ([थ्रेड एसटीआर यूटीएफ 8 स्ट्रिंग], नल); Dispatch_async (क़तार 1, ^ {// एक दिन के लिए अपने ग्राफिक्स ड्रा करें .....}); }  

लेकिन कभी-कभी ये धागे डेटाबेस को एक ही समय में पढ़ते हैं और उनमें से कुछ डेटा ठीक से नहीं प्राप्त कर सकते हैं, इसलिए अंतिम ग्राफिक पूर्ण नहीं है। क्या कोई मुझे कुछ सुझाव दे सकता है? बहुत-बहुत धन्यवाद।

मैं इसका कारण जानने का प्रयास कर रहा हूं, क्योंकि मैं इसे मुख्य थ्रेड का इस्तेमाल करते हुए 2, 3 सेकंड में देरी करता हूं। SQLite3 डेटा बेस को पढ़ने के कारण?

इस ग्राफ़िक को ड्राइंग करने की प्रक्रिया है:

  - (शून्य) रेखाचित्र: (सीजीआरटीएक्ट) Rect {1.draw एक्स अक्ष तिथि लेबल के साथ; समय लेबल के साथ 2.draw Y अक्ष; एनएसएआरआरए * टाइमअरेरे = @ [@ "08:00", 11:00 ", 14:00", 17:00 ", 20:00"]; (NSString * timeArray में समय के लिए) {for (int i = 0; i & lt; 31; i ++) {NSString * DateTimeStr = dateStr + timeStr; Int a = [DataManager getResult: DateTimeStr]; UIColor * RoundColor; यदि (ए == 1) {गोल रंग = [UIColor colorWithRed: 22 9 / 255.0 हरा: 0 / 255.0 नीला: 145 / 255.0 अल्फा: 1.0]; } और अगर (एक == 2) {गोल रंग = [UIColor colorWithRed: 0 / 255.0 हरा: 164 / 255.0 नीला: 22 9 / 255.0 अल्फा: 1.0]; } और अगर (एक == 3) {गोल रंग = [UIColor colorWithRed: 22 9 / 255.0 हरा: 221 / 255.0 नीला: 0 / 255.0 अल्फा: रंग एल्फा] ;; } Const CGFloat * घटक = CGColorGetComponents (RoundColor.CGColor); CGContextSetRGBFillColor (संदर्भ, घटक [0], घटकों [1], घटकों [2], घटकों [3]); CGContextFillEllipseInRect (संदर्भ, CGRectMake (roundXnow, roundYnow, roundR, roundR)); }}}  

मैं सोच रहा हूं कि जब मैं SQLite3 डेटा बेस पढ़ रहा हूं, तो विलम्ब होता है, क्योंकि मुझे पता है कि मेरे डेटा बेस में बहुत रिकार्ड हैं ।

यहां आरेखण एक बहुत ही हल्का आपरेशन है, संभवतः आपके द्वारा सामना किए जा रहे समय के मुद्दों से संबंधित हैं गणना (या डेटा प्राप्त करना) या जो कुछ भी आप वास्तव में डॉट ड्राइंग से पहले कर रहे हैं। तो विशेष रूप से उपकरणों, समय प्रोफाइलर का उपयोग करें यह आपको दिखाएगा कि कौन-से ऑपरेशन अधिक समय लेते हैं (ग्राफ़िक में पाइक्स को देखें जो आपके ऐप के चलते प्रदर्शित हो जाएंगे)। इससे आपको सुराग मिलेगा।

इसके अलावा, जैसा कि यहां ठीक से वर्णित है, सभी यूआई को मुख्य धागे में किया जाना चाहिए। लेकिन उन पूर्व-गणनाएं और आपके डेटा के साथ संभवत: फैले हुए हैं - यह वह जगह है जहां आपको बहुस्तरीय समाधान मिलना चाहिए यदि यह संभव है।


Comments