Intereting Posts
त्रुटि डोमेन = NSURLErrorDomain कोड = -1017 "प्रतिक्रिया पार्स नहीं कर सकता" स्विफ्ट आईओएस लोकल नोटिफिकेशन कैसे कैमरा और कैमरा रोल एक्सेस सी-सी करने के लिए lldb त्रुटि: चर उपलब्ध नहीं है Xcode में आईओएस UI टेस्ट में एक पिकर दृश्य आइटम कैसे चुन सकता है? स्वीकार करें-एन्कोडिंग: IOS पर gzip आईओएस – कोर डेटा सेट प्राथमिक कुंजी प्राथमिकता है Grails (आईओएस विशिष्ट): रिटर्निंग वीडियो (एमपी 4) फ़ाइल ब्रोकन पाइप अपवाद देता है (getOutputStream () पहले से ही इस प्रतिक्रिया के लिए बुलाया गया है) आईओएस 8.1 ऑटो रोटेशन Serializing NSDictionary में त्रुटि पृष्ठभूमि दर्ज करते समय एप से बाहर निकलने का तरीका IOS में एक ही UIButton पर एकाधिक इवेंट को कैसे रोकें? एक टेबलवि्वेज का चयन करना सूचकांक के लिए शून्य प्रदान करता है। चयनित ()?। स्विफ्ट में पंक्ति hitTest: साथएवेंट और सबवयव्स के साथ यूट्यूब एपीआई से वीओवीओ वीडियो के लिए आईओएस पर प्लेबैक प्रतिबंधित

मैं एक UITableView कैसे गति कर सकता हूँ?

मेरे पास 200 वर्गों में लगभग 400 कोशिकाओं के साथ एक यूआईटीबल दृश्य है और उपयोगकर्ता इंटरैक्शन (स्क्रॉल करना, कोशिकाओं का चयन करना) के जवाब में यह थोड़ा सुस्त है। मैंने सुनिश्चित किया है कि कोशिकाओं और हेडर दृश्यों को पुनः प्राप्त करने के तरीके न्यूनतम चल रहे हैं क्योंकि यह चल रहा है, और मुझे नहीं लगता कि मैं इसे धीमा करने के लिए सामान्य से कुछ भी कर रहा हूं। कोशिकाओं और शीर्षलेखों में सिर्फ एक पृष्ठभूमि छवि और पाठ है क्या किसी और की इस तरह की समस्या है, और क्या आप इसे थोड़ा तेज करने के लिए किसी भी तरह से जानते हैं?

संपादित करें: मैं एक उपहार की पेशकश कर रहा हूँ क्योंकि मुझे इस पर कुछ उपयोगी प्रतिक्रिया प्राप्त करना अच्छा लगेगा। मुझे नहीं लगता कि जवाब मेरे कोड में एक समस्या में है इसके बजाय मैं UITableView को फिर से इंजीनियर करने के लिए रणनीतियों की तलाश कर रहा हूं ताकि यह तेज़ी से चला सके। मैं नया कोड जोड़ने के लिए पूरी तरह से खुली हूँ और मैं सुनने के लिए उत्सुक हूं कि आप लोग क्या कहें।

आलसी दोनों सिम्युलेटर और मेरी डिवाइस, एक आईफोन 4 पर मनाया जाता है। यहां देखें मेरे कार्यान्वयन viewForHeaderInSection और viewForHeaderInSection , जो कि केवल viewForHeaderInSection को viewForHeaderInSection लागू किया गया है। मैं पुन: उपयोग की जाने वाली कोशिकाओं और शीर्ष लेख दृश्यों में हूँ

 - (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger) section { HaikuHeaderView* view= [m_sectionViews objectAtIndex:section]; NSMutableArray* array= [m_haikuSearch objectAtIndex:section]; Haiku* haiku= [array objectAtIndex:0]; [view.poetLabel setText:[haiku nameForDisplay]]; return view; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; cell.backgroundView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cell gradient2.png"]]; // (Set up a bunch of label attributes in the cell...) } NSMutableArray* array= [m_haikuSearch objectAtIndex:indexPath.section]; Haiku* haiku = [array objectAtIndex:indexPath.row]; cell.textLabel.text = [haiku.m_lines objectAtIndex:0]; return cell; } 

Solutions Collecting From Web of "मैं एक UITableView कैसे गति कर सकता हूँ?"

यहां तक ​​कि अगर आपके सेल वास्तव में है कि सरल (पृष्ठभूमि छवि और लेबल) पर विचार करने के लिए कुछ चीजें हैं

छवि कैशिंग यह स्पष्ट बात है – यदि आप हर जगह एक ही छवि का उपयोग कर रहे हैं, तो उसे एक बार यूआईएमएज में लोड करें और इसे पुन: उपयोग करें। यहां तक ​​कि अगर सिस्टम इसे स्वयं पर कैश करेगा, सीधे पहले से लोड किए गए एक का उपयोग करके कभी चोट नहीं पहुंचे।

तेजी से गणना एक और स्पष्ट बात – जितनी जल्दी हो सके उतनी ही ऊंचाई और सामग्री की गणना करें। तुल्यकालिक fetches (नेटवर्क कॉल, डिस्क पढ़ता आदि) मत करो।

चित्र में अल्फा चैनल क्या है जब ड्राइंग पारदर्शी है जैसा कि आपके सेल पृष्ठभूमि के पीछे कुछ भी नहीं है, यह सुनिश्चित करें कि आप अल्फा चैनल के बिना अपनी छवि को सहेज लें। इससे प्रसंस्करण बहुत बचाता है

पारदर्शी लेबल यह आपके पृष्ठभूमि दृश्य के शीर्ष पर लेबल के लिए भी सही है, दुर्भाग्य से यह अपारदर्शी बनाकर आपके सेल के दिखने को बर्बाद कर सकता है – लेकिन यह छवि पर निर्भर करता है।

कस्टम सेल सामान्यतया, उप- UITableViewCell और drawRect: कार्यान्वित करना drawRect: स्वयं उपववत्ता पदानुक्रम के निर्माण की तुलना में तेज़ है आप अपनी छवि को एक क्लास चर बना सकते हैं जो सभी उदाहरणों का उपयोग करते हैं। drawRect: आप छवि और इसके ऊपर के पाठ को आकर्षित करेंगे।

कम्पोजिटिंग की जांच करें सिम्युलेटर के पास ऐसे हिस्सों को उजागर करने का एक उपकरण है, जो पारदर्शिता के कारण रेंडर-महंगे हैं (हरा ठीक है, लाल अल्फा-ब्लेंडिंग है)। यह डीबग मेनू में पाया जा सकता है: "रंग मिश्रित परतें"

सबसे अच्छी बात यह है कि अगर आप अपने कोड को गति देने की तलाश कर रहे हैं तो उसे प्रोफ़ाइल दें। इसके लिए दो कारण हैं:

  1. आप कुछ चीजों के बारे में पढ़ सकते हैं जो सामान्य रूप से तालिका प्रदर्शन को बेहतर बनाते हैं, जैसे निश्चित-ऊँचाई वाली कोशिकाओं का उपयोग करना और कोशिकाओं का पुन: उपयोग करना, और संभवतः उन चीज़ों को लागू करने में मदद मिलेगी (ऐसा लगता है कि आपने पहले ही ऐसा किया है)। लेकिन जब आपके कोड को गति देने की बात आती है, तो आपको वास्तव में यह जानना होगा कि आप अपना ऐप कितना समय व्यतीत कर रहे हैं ऐसा हो सकता है कि कुछ ऐसे तरीके हैं जो एक बहुत लंबे समय से लेते हैं, या एक ऐसा तरीका जो अपेक्षाकृत जल्दी है, लेकिन अपेक्षा की जाती है जितनी बार आप अपेक्षा करते हैं।

  2. यह जानना असंभव है कि क्या आप चीजों को गति देने के प्रयास में जो परिवर्तन करते हैं, वास्तव में कोई फर्क नहीं पड़ता है, जब तक आपके पास कुछ संख्याओं को मापने के लिए नहीं है। यदि आप यह दिखा सकते हैं कि आपका कोड एक समयचर्या में अपने समय का 80% खर्च कर रहा था और आप इसे 35% तक घटाते हैं, तो आप जानते हैं कि आप प्रगति कर रहे हैं

तो, उपकरण तोड़कर मापना शुरू करें। यदि आप कर सकते हैं, तो आप को मापने के लिए एक अच्छा विचार है, जब आप प्रत्येक अलग-अलग गतिविधियों को कर रहे हैं जिन्हें आप गति देना चाहते हैं … एक स्क्रॉलिंग करते समय एक प्रोफाइलिंग सत्र करते हैं, एक निश्चित अवधि में जितनी अलग कोशिकाओं का चयन कर सकते हैं आदि। परिणाम को बचाने के लिए मत भूलो ताकि आप बाद में तुलना कर सकें।

बस इन बातों को ध्यान में रखें ..

  1. क्या आप कोशिकाओं का पुन: उपयोग कर रहे हैं … जो एक अच्छा अभ्यास है ..
  2. सुनिश्चित करें कि आप cellForRowAtIndexPath कॉलबैक में कोई महँगा गणना नहीं कर रहे हैं, या सेलफोररॉएटइंडएक्सपैथ से बुलाए गए फ़ंक्शन में।
  3. आपने कहा कि पृष्ठभूमि चित्र है एक और कारण यह है कि आपको अपने सेल का पुन: उपयोग करना चाहिए।

सेल पुन: उपयोग के बारे में कुछ अच्छी जानकारी यहां है ..

संपादित करें: इस पेज को बहुत देर हो चुकी है ..

यह ऐसा प्रश्न धागा आपकी मदद कर सकता है … विशेष रूप से स्वीकृत उत्तर …

  1. पृष्ठभूमि के लिए एक साझा छवि उदाहरण का उपयोग करें (आप हर बार एक नया सेल बनाया जाता है के लिए एक आवंटन / init / रिलीज़ करें)। जब आपकी टेबल दृश्य बड़ा हो, इसका मतलब यह है कि स्मृति में पृष्ठभूमि X कोशिकाओं की तुलना में अधिक मेमोरी लेता है

    के बजाय
    cell.backgroundView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cell gradient2.png"]];
    महज प्रयोग करें :
    cell.backgroundView= [SomeHelperClass sharedBackgroundUIImageResource];

  2. यदि वह मदद नहीं करता है, तो लेबल्स और अन्य सबव्यूज़ के बजाय सीग का उपयोग करें (एक स्क्रीनशॉट यहां मदद करेगा .. पता करने के लिए कि हम किस बारे में बात कर रहे हैं)।

तालिका देखें के प्रतिनिधियों को लागू करता है:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

यदि ऐसा है तो आप इसके बजाय अपनी UITableViewCell की पंक्तिहाइट प्रॉपर्टी सेट करने पर विचार कर सकते हैं।

क्या आप बहुत सारे सबव्यूज़ का उपयोग कर रहे हैं?

यदि हां, तो एक बहुत अच्छी तकनीक है, बहुत सारे लेबल्स और छवियों को जोड़ने के बजाय, उन्हें कोर ग्राफिक्स का प्रयोग करें।

ऐसा करने के लिए, आपको UITableViewCell subclass करना होगा और -(void)drawRect:(CGRect)rect विधि को कार्यान्वित करना होगा।

दो सुझाव: एक -initWithStyle:reuseIdentifier: का उपयोग -initWithStyle:reuseIdentifier: बजाए अपनी तालिका दृश्य कोशिकाओं के लिए:। दूसरा, सेल की सेटिंग को बाहर करना है। बैकग्राउंड देखें किसी ढाल के साथ एक छवि में देखें और देखें कि वह अपराधी है या नहीं। हर बार जब मैंने तालिका में खराब प्रदर्शन किया है तो यह एक छवि के कारण रहा है।

यह थोड़ी दूर विषय है (क्योंकि आपके पास सभी कक्षों के लिए केवल एक पृष्ठभूमि चित्र है):

मेरा ऐप प्रत्येक सेल में अलग-अलग छवि प्रदर्शित करता है UITableView के बारे में 5 कोशिकाओं को जोड़ने के बाद – तालिका काफी धीमा हो गई है जब भी मैं दृश्य नियंत्रक को खोलता हूं, तब सभी चित्रों को संसाधित करने में 1-2 सेकंड लगते हैं।

 if let image = UIImage(contentsOfFile: photoFile){ // just set it and let system fit it //cell.imageView!.image = image // 1 - Calculate sized let DEFAULT_THUMBNAIL_WIDTH: CGFloat = (cellHeight / 4) * 5; let DEFAULT_THUMBNAIL_HEIGHT: CGFloat = cellHeight; let aspectRatio: CGFloat = image.size.width / image.size.height var willBeHeight = DEFAULT_THUMBNAIL_HEIGHT var willBeWidth = DEFAULT_THUMBNAIL_HEIGHT * aspectRatio if(willBeWidth > DEFAULT_THUMBNAIL_WIDTH){ willBeWidth = DEFAULT_THUMBNAIL_WIDTH willBeHeight = willBeWidth / aspectRatio } let eps:CGFloat = 0.000001 assert((willBeHeight - eps) <= DEFAULT_THUMBNAIL_HEIGHT); assert((willBeWidth - eps) <= DEFAULT_THUMBNAIL_WIDTH); // 2 - Create context var size:CGSize = CGSize( width: DEFAULT_THUMBNAIL_WIDTH, height: DEFAULT_THUMBNAIL_HEIGHT) UIGraphicsBeginImageContext(size) // one-to-one rect //var imageRect: CGRect = CGRectMake(0.0, 0.0, size.width, size.height) var imageRect: CGRect = CGRectMake(0.0, 0.0, willBeWidth, willBeHeight) // 3 - Draw image image.drawInRect(imageRect) var imageResult: UIImage = UIGraphicsGetImageFromCurrentImageContext() cell.imageView!.image = imageResult UIGraphicsEndImageContext() }else{ DDLogError("Can not draw photo: \(photoFile)") } 

इसलिए मैंने अपनी सभी छवियों के लिए छोटे थंबनेल तैयार करने के साथ समाप्त कर दिया है

कोशिकाओं का पुन: उपयोग करें वस्तु आवंटन में एक प्रदर्शन लागत होती है, खासकर यदि आवंटन को बार-बार एक छोटी सी अवधि में करना पड़ता है- कहते हैं, जब उपयोगकर्ता तालिका दृश्य को स्क्रॉल करता है। यदि आप नए को आवंटित करने के बजाय कोशिकाओं का पुन: उपयोग करते हैं, तो आप तालिका-दृश्य प्रदर्शन को बहुत बढ़ाते हैं। सामग्री के रिलेआउट से बचें जब कस्टम सबव्यूज़ के साथ कोशिकाओं का पुन: उपयोग किया जाता है, तो हर बार तालिका दृश्य एक सेल का अनुरोध करता है, उन सबव्यूज़ को बिछाने से बचना एक बार, जब सेल बनाया जाता है, तो एक बार सबव्यूज़ बाहर रखे। अपारदर्शी सबव्यूज़ का उपयोग करें तालिका दृश्य कोशिकाओं को अनुकूलित करते समय, पारदर्शी नहीं, सेल अपारदर्शी के उप-दृश्य बनाते हैं।