2011-10-03 5 views
11

मैं यह पता लगाने की कोशिश कर रहा हूं कि मुझे कैश करना चाहिए [यूआईएफओटी फ़ॉन्टविथनाम: @ "मायफॉन्ट" आकार: 24]। मैं इस फ़ॉन्ट को कई स्थानों पर पुनः उपयोग कर रहा हूं। मैं सोच रहा हूं कि आईओएस पहले से ही मेरे लिए कैशिंग कर रहा है क्योंकि ओएस स्तर पर फ़ॉन्ट कैशिंग बहुत आम है।आईओएस यूआईएफओटी कैशिंग?

क्या कोई इस पर टिप्पणी कर सकता है?

धन्यवाद।

उत्तर

18

पिछली बार मैंने चेक किया, सिस्टम फोंट को कैश किया गया था (यानी [UIFont systemFontOfSize:foo] पर कॉल करने से आपको दो बार एक ही ऑब्जेक्ट लौटाया गया)। मुझे यकीन नहीं है कि कैश कितनी बार फिसलता है, लेकिन यह कैश फोंट नहीं करने के लिए बहुत मूर्खतापूर्ण प्रतीत होता है, क्योंकि उन्हें निब लोडिंग के दौरान हर समय तत्काल किया जाता है।

बेशक, यदि आप इसे एक ही फ़ंक्शन में दो बार कर रहे हैं, तो यह स्थानीय चर में कैश करने के लिए थोड़ा तेज़ है (और यह कोड आकार को कम करता है, क्योंकि ओबीजे-सी विधि कॉल बहुत बड़ी हैं!)। यदि आप इसे विभिन्न स्थानों पर sporadically कर रहे हैं, तो यह प्रयास के लायक नहीं हो सकता है।

यह कहा गया है कि आप एक क्लास विधि या "सिंगलटन" (जैसे [MyAppBranding titleFont] या [[MyAppBranding currentBranding] titleFont]) पर एक विधि के माध्यम से फ़ॉन्ट तक पहुंच सकते हैं। इसका मतलब है कि आप अधिक आसानी से इस्तेमाल किए गए फ़ॉन्ट को बदल सकते हैं, यदि आप देखते हैं कि यह एक प्रदर्शन बाधा है, और इसे अधिक एकाधिक ब्रांडों का समर्थन करने में आसान बनाता है तो आप कैशिंग की एक अतिरिक्त परत जोड़ सकते हैं।

18

मुझे आश्चर्य है कि आईओएस पहले से ही मेरे लिए यह कैशिंग कर रहा है क्योंकि ओएस स्तर पर फ़ॉन्ट कैशिंग बहुत आम है।

आईओएस (मैंने केवल आईओएस 6.1 पर परीक्षण किया) है।

मैं बस अपना खुद का कैशिंग लागू करना चाहता था। आप जानते हैं क्योंकि मैं एक स्मार्ट लड़का हूं और फ़ॉन्ट लोडिंग शायद तेज़ नहीं है।

एप्पल में लोगों को भी स्मार्ट समझते हैं। fontWithName:size: द्वारा लौटाई गई वस्तुओं बराबर फ़ॉन्ट नाम और बराबर आकार के लिए समान हैं। जगह पर एक कैशिंग तंत्र है।

इसकी पुष्टि करने के लिए मैंने पूरे ऐप में कुछ एनएसएलॉग लगाए।

NSLog(@"GillSans 12 %p", [UIFont fontWithName:@"GillSans" size:12.0f]); 

वे सभी एक ही स्मृति पता दिखाते हैं।

आपके कस्टम फ़ॉन्ट्स के साथ भी काम करता है।