2010-12-15 7 views
12

यह वास्तव में बेवकूफ सवाल हो सकता है, लेकिन क्या कोई मुझे UIGraphicsBeginImageContext का उपयोग करके एक CGContextRef बनाने और छवियों को चित्रित करने के लिए CGBitmapContextCreate का उपयोग करने के बीच अंतर बता सकता है? विशेष रूप से अब चूंकि UIKit ड्राइंग थ्रेड सुरक्षित है, इसलिए मैं सोच रहा था कि UGBraphicsBeginImageContext पर CGBitmapContextCreate का उपयोग करने का कोई कारण था या नहीं।UIGraphicsBeginImageContext बनाम CGBitmapContext बनाओ आईओएस

+2

"वास्तव में बेवकूफ सवाल" आमतौर पर आपको +6 अपवॉट नहीं मिलता है;) – Mazyod

उत्तर

10

ऐप्पल के UIKit Function Reference के अनुसार, जो 15 नवंबर 2010, UIGraphicsBeginImageContext की कवर तिथि रखता है और संबंधित कार्यों को अभी भी मुख्य धागे पर ही बुलाया जाना चाहिए। डेवलपर प्रलेखन में एक ही पाठ दोहराया जाता है जो नवीनतम एक्सकोड, 3.2.5 के साथ आता है। हालांकि, यह UIGraphicsGetCurrentContext के लिए रिपोर्ट करता है जिसे मैं स्पष्ट रूप से थ्रेड सुरक्षित रूप से समझता हूं। मेरी समझ यह थी कि केवल UIGraphicsGetCurrentContext और UIImage, UIColor और UIFont कक्षाएं अब UIKit की पूरी तरह से थ्रेड सुरक्षित हैं, लेकिन मैं एक निश्चित संदर्भ नहीं ढूंढ पा रहा हूं।

भले ही, UIGraphicsBeginImageContext एक UIKit wrapper है जो CGBitmapContextCreate के शीर्ष पर बैठता है और इसकी कार्यक्षमता को कम करता है। विशेष रूप से आप एक निश्चित घटक आदेश के साथ आरजीबीए रंग अंतरिक्ष छवियों तक ही सीमित हैं (हालांकि यह आईओएस संस्करण के अनुसार भिन्न होता है) और ड्राइंग के लिए अपना खुद का लक्ष्य बफर निर्दिष्ट नहीं कर सकता है। इसलिए, उदाहरण के लिए, कोरग्राफिक्स संरचना का एक गुच्छा करने के लिए बेकार है और फिर परिणाम को ओपनजीएल पर पोस्ट करना और पाइपिंग ग्राफिक्स के लिए अनुपयोगी है जो आपको पहले से ही कोरग्राफिक्स में कुछ सरणी रूप में मिला है।

हालांकि, जहां UIKit विधि आपको आवश्यक कार्यक्षमता का समर्थन करती है और उपयोग करने के लिए सुरक्षित है, कोरग्राफिक्स विधियों के लिए कोई अंतर्निहित लाभ नहीं है।

+4

http://developer.apple.com/library/ios/#releasenotes/General/WhatsNewIniPhoneOS/Articles/iPhoneOS4.html#// Apple_ref/doc/uid/TP40009559-SW29 रिलीज नोट्स में कहता है कि ग्राफिक्स संदर्भ में ड्राइंग थ्रेड सुरक्षित है, आपको लगता है कि उनका दस्तावेज़ केवल असंगत है? मैंने एक प्रेषण कतार से UIGraphicsBeginImageContext को कॉल करने का प्रयास किया है और यह ठीक काम करता है। विस्तृत स्पष्टीकरण के लिए +1, मैंने सोचा कि यह सिर्फ एक रैपर हो सकता है लेकिन अनिश्चित था, धन्यवाद। – marchinram

+0

एक और सवाल, आपके अनुभव से दूसरे की तुलना में एक तरफ तेज है? मुझे लगता है कि सीजी स्तर पर जाने के लिए तेजी से जाना होगा, लेकिन निश्चित रूप से पता नहीं है। – marchinram

+0

दो चीजें असंगत हैं - मैं शर्त लगाऊंगा कि रिलीज नोट्स अधिक सटीक हैं, क्योंकि वे विशेष रूप से नई सुविधाओं को हाइलाइट करने के लिए लिखे गए थे जबकि अन्य दस्तावेज शायद अपडेट नहीं किए गए हैं। मैं उम्मीद करता हूं कि सीधे कोरग्राफिक्स को ऑब्जेक्टिव-सी कॉल पर बेहद मामूली सैद्धांतिक प्रदर्शन लाभ मिलेगा, लेकिन कुछ भी संभवतः इससे कोई फर्क नहीं पड़ता। UIGraphicsBeginImageContext के लिए, जो एक सी कॉल है, मैं अंतर को मापने योग्य नहीं होने की उम्मीद करता हूं - UIKit फ़ंक्शन कोरग्राफिक्स को कॉल करेगा और वह चीज़ जो संदर्भ का निर्माण होगा। – Tommy