2011-10-31 21 views
7

नए रिलीज आईओएस 5.0 एसडीके पर हमारे आईफोन एप्लिकेशन को फिर से सम्मिलित करने के बाद मुझे अजीब समस्या का सामना करना पड़ा - सभी यूआईएममेज: छवि नामांकित (वास्तविक छवि लोडिंग के साथ पहली बार कॉल करें) और यूआईएममेज: imageWithContentsOfFile 10 काम करना शुरू कर दिया पहले से धीमा समय। मैं समस्या को कम करने में कामयाब रहा: यह केवल जेपीईजी और पीएनजी फाइलों के लिए मामला है (gifs नहीं!) और यह फ़ाइल आकार की वजह से नहीं है। छोटे 32 * 32 पीएनजी की सीधी लोडिंग लगभग 300 एमएमएस लेती है ... पुराने उपकरणों पर 30 एमएमएस की तुलना में (3.1 और 4.3.5 पर सटीक उसी कोड के साथ चेक किया गया)UIImage: imageWithContentsOfFile आईओएस 5.0 में 10 गुना धीमा है

मैंने नए पेश किए गए सीआईएममेज के माध्यम से छवि लोड करने का भी प्रयास किया इस कोड को

WLLog(@"Data loading..."); 
NSData *imageData = [NSData dataWithContentsOfFile:path]; 
WLLog(@"CIImage creation..."); 
CIImage* cii = [CIImage imageWithData:imageData]; 
WLLog(@"CIImage creation ok..."); 
float scle = 1.0; 
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000 
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { 
    scle = [[UIScreen mainScreen] scale]; 
} 
#endif 
CIContext *context = [CIContext contextWithOptions:nil]; 
UIImage* res5 = [[UIImage alloc] init]; 
WLLog(@"UIImage creation..."); 
[res5 initWithCGImage:[context createCGImage:cii fromRect:cii.extent] scale:scle orientation:UIImageOrientationUp]; 
WLLog(@"Done!"); 
किसी भी भाग्य के बिना

... इस एक पंक्ति

CIImage* cii = [CIImage imageWithData:imageData]; 

यहां तक ​​कि छोटे छवियों (4KB png) पर एक ही 300 मि.से लेता है। इमो, बिल्कुल पार्स करने के लिए कुछ भी आसान नहीं है!

क्या लोडिंग समय में इस तरह के अजीब बदलाव को हल करने के लिए कुछ भी है? फिलहाल ऐसा लगता है कि एसडीके आंतरिक में कुछ बदल गया है :(

उत्तर

8

।। मुझे एक ही समस्या थी और मुझे यह पता लगाने में कुछ घंटे लगे कि क्या गलत हुआ। हमारी दो स्थितियां बिल्कुल वही लगती थीं: एक पुरानी परियोजना जो आईओएस 5 पर बहुत अच्छी तरह से नहीं चलती थी वाई और

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

तो मैं बैठ गया और एक स्क्रिप्ट लिखी जिसने सभी पीएनजी फाइलों को इमेजमैजिक के रूप में टीजीए बनाने के लिए परिवर्तित कर दिया, फिर पीएनजी को हटा दिया (केवल अच्छे उपाय के लिए) और फिर अस्थायी टीजीए को वापस पीएनजी फाइलों में परिवर्तित कर दिया। इस तरह से मैंने यह सुनिश्चित किया कि वे न केवल फ़ोटोशॉप द्वारा बनाए गए थे, बल्कि पूरी तरह से फिर से लिखे गए थे।

यह चाल है। सब कुछ सुचारू रूप से चलता है, जैसा कि यह आईओएस 3 और 4 पर किया गया था।

मुझे यकीन नहीं है कि फ़ोटोशॉप के साथ इसका कुछ संबंध है या नहीं। अन्य एप्स मैंने हाल ही में फ़ोटोशॉप के साथ बने पीएनजी के साथ ठीक काम किया है। तो शायद यह फ़ोटोशॉप का संस्करण था जिसे मैंने पहली बार पीएनजी बनाने के लिए काफी पहले इस्तेमाल किया था।

या शायद पुरानी छवि फ़ाइलों को ओवरराइट करना पर्याप्त था, मुझे यकीन नहीं है। लेकिन अब यह ठीक है।

मुझे आशा है कि इससे मदद मिलती है!

+0

धन्यवाद, मैं निश्चित रूप से इसे आज़मा दूंगा और अगर यह मदद करता है तो यहां पोस्ट करें। वैसे भी मेरे लिए एक बग जैसा लगता है (नई रिलीज 5.0.1 के साथ चीजें बेहतर नहीं हैं) और मैं इसे जल्द ही ऐप्पल में फाइल करूंगा – IPv6

+0

तो, क्या आपने अभी तक कोशिश की है?क्या यह आपके साथ भी काम करता है? - मैंने कुछ और परीक्षण किए हैं जो पुष्टि करते हैं कि इसे डिस्क से पीएनजी पढ़ने के साथ करना था। असल में, एक और समय प्रोफाइलर ट्रेस द्वारा निर्णय लिया गया कि मैंने पीएनजी के लिए मेटाडेटा क्लास बनाते समय आईओएस 5 द्वारा समय का सबसे बड़ा हिस्सा खो दिया है। – Martin

+0

शानदार! हाँ, यह बहुत मदद करता है, धन्यवाद! और आप सही हैं - ऐसा लगता है जैसे मेटाडाटा इस पागलपन (जेपीईजी और पीएनजी दोनों के लिए) के लिए ज़िम्मेदार है। मेटाडाटा सक्षम किए बिना सभी पीएनजी और जेपीईएस को फिर से सहेजने के बाद सभी सामान्य रूप से काम करना शुरू कर दिया - छवियां 30ms में लोड हो रही हैं। ऐसा लगता है कि प्री-5.0 आईओएस एसडीके ने किसी भी पीएनजी/जेपीईजी मेटाडाटा – IPv6

4

यह बहुत अच्छी तरह से एक बग हो सकता है। bug reporter के माध्यम से ऐप्पल को एक रडार सबमिट करें। एक साधारण परियोजना को एक साथ फेंकना सुनिश्चित करें जो स्पष्ट रूप से बग को प्रदर्शित करता है और इसे संलग्न करता है बग रिपोर्ट करने के लिए - अन्यथा एप्पल आपको एक ईमेल एक के लिए पूछ यहाँ एक समान मुद्दे के साथ भेज देंगे

पोस्ट अपने रडार # अन्य लोगों ने तो संदर्भित कर सकते हैं कि # जब साथ ही एप्पल के लिए एक समान बग सबमिट

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