मेरा अनुमान है कि स्ट्रिंग को स्थिर के रूप में घोषित करके, हर बार यह -dequeueReusableCellWithIdentifier:CellIdentifierforIndexPath:
में पारित हो जाता है कि प्रत्येक पॉइंटर का उपयोग प्रत्येक बार किया जाता है (जैसा कि स्थिर रूप से घोषित चर केवल ढेर पर आवंटित होते हैं, प्रोग्राम के निष्पादन में बहुत जल्दी)
[NSString -isEqualToString:]
सबसे पहले संभवतः एक सूचक की तुलना करने के लिए लागू किया गया है, इसके बाद एक चरित्र-वार तुलना फॉलबैक के रूप में तुलना की जाती है, जिसे मैं प्रत्येक पुनरावृत्ति पर कुछ चक्रों को बंद कर सकता हूं।
इस से लाभ प्राप्त करने के लिए बहुत कुछ नहीं है, क्योंकि (ए) टेबल सेल पुन: आबादी आमतौर पर कोशिकाओं के बहुत छोटे सेट पर चलती है, और अच्छी तरह अनुकूलित होती है, और (बी) टेबल रीफ्रेश विस्फोट होता है - यह एक बार होता है और तब तक तब तक नहीं होता जब तक कि उपयोगकर्ता स्क्रॉल या एप्लिकेशन तर्क सामग्री को बदल नहीं लेता - यदि आप -reloadTable
को दूसरी बार 100 बार कॉल करना समाप्त करते हैं, तो आपके एप्लिकेशन तर्क के साथ स्पष्ट रूप से कुछ गलत है।
मुझे संदेह है कि स्थैतिक कीवर्ड एक वेस्टिगियल विरासत सम्मेलन है - शायद दिन में वापस, ऐप्पल ने उचित स्ट्रिंग तुलना करने के बजाए पॉइंटर पर धोया था।
यदि "हर बार एक बनाना" से आपका मतलब है "एक स्थिर पॉइंटर को एक स्टैक वैरिएबल में दबाकर" सुनिश्चित करें। लेकिन यह 'int i = 3;' कहने जैसा महंगा है, क्योंकि संकलक ने स्थिरता में '@" पहचानकर्ता "को संकलित किया है। एकमात्र समय स्थिर वास्तव में लाभ होगा यदि स्ट्रिंग को स्थिर स्ट्रिंग का उपयोग करने के बजाय रनटाइम पर बनाया गया है। –
यह अभी भी एक लाभ है। जब भी विधि चलती है तो यह दो प्रोसेसर चक्रों में कटौती करता है (जो कई बार हो सकता है)। – ughoavgfhw
@ughoavgfhw हाँ, लेकिन क्या यह आपके बाइनरी को बड़ा नहीं बनाता है और आपके ऐप को अधिक मेमोरी का उपयोग करता है? – ma11hew28