2009-08-23 11 views
5

में सी लाइब्रेरी को लपेटने पर युक्तियाँ मेरे पास सी में लिखी एक लाइब्रेरी है जिसे मैं मैक या आईफोन पर ऑब्जेक्टिव-सी ऐप में उपयोग करना चाहता हूं।उद्देश्य-सी

दुर्भाग्यवश, चूंकि इस पुस्तकालय को ओपन सोर्स स्पेस में व्यक्तियों द्वारा लिखा जा रहा है, इसलिए दस्तावेज़ीकरण काफी अस्पष्ट और अपूर्ण है। जबकि मैं पुस्तकालय में सामान का उपयोग करने का तरीका समझ सकता हूं, मेरे पास वास्तव में पूरे कोड बेस का अवलोकन नहीं है।

मैं क्या करना चाहता हूं लाइब्रेरी को उद्देश्य-सी में आसानी से उपयोग करने योग्य और हस्तांतरणीय कक्षाओं में लपेटना है।

  • क्या किसी के पास इस दृष्टिकोण के बारे में कोई सुझाव है?
  • पुस्तकालय की संरचना के बारे में दृश्य पदानुक्रम प्राप्त करने के सर्वोत्तम तरीके पर कोई सलाह?
  • पुन: प्रयोज्यता और उपयोग में आसानी के लिए रैपर को सर्वोत्तम रूप से कैसे व्यवस्थित करना है, यह तय करने के बारे में मैं कैसे जाउंगा?

किसी भी और सभी मदद की सराहना की जाएगी, धन्यवाद!

उत्तर

7

मैंने इसे कुछ बार खुद किया है। यह मजेदार हो सकता है - यह खराब कोड को ठीक करने (या कम से कम छिपाने) का मौका है!

कोड के दृश्य पदानुक्रम प्राप्त करने के लिए आप Doxygen का उपयोग कर सकते हैं (हालांकि मैंने इसे केवल सी ++ पुस्तकालयों के लिए उपयोग किया है, यह सी के साथ भी काम करता है), या वहां के किसी भी अन्य निःशुल्क टूल।

लाइब्रेरी को डिज़ाइन या दस्तावेज़ीकृत नहीं किया गया है, तो अंतर्निहित लाइब्रेरी की तरह अपने रैपर वर्ग को न बनाएं। यह उपयोगकर्ता के दृष्टिकोण और कोड का उपयोग करने के तरीके के बारे में विचार करने का आपका मौका है। अपने टेस्ट केस पहले इसे समझने के लिए लिखें, और/या पहले से ही लाइब्रेरी का उपयोग करने वाले कुछ लोगों से बात करें।

आप जो कर रहे हैं उसके साथ मेल खाने वाले दो अच्छे डिज़ाइन पैटर्न Adapter और Facade हैं।

+2

+1। आपको कुछ अच्छे इंटरफेस को परिभाषित करना चाहिए जो आप पहले चाहते हैं, फिर सी लाइब्रेरी –

+0

का उपयोग करके कार्यान्वयन को भरें जब आप इंटरफेस कहते हैं, तो आपका मतलब उपयोगकर्ता इंटरफेस या कोड इंटरफेस है? – Jasarien

+0

मुझे लगता है कि उसका मतलब कोड इंटरफेस है। –

2

सबसे पहले, याद रखें: एक सी लाइब्रेरी एक उद्देश्य-सी लाइब्रेरी है। आपको वास्तव में किसी भी रैपिंग को करने की ज़रूरत नहीं है, हालांकि आप लाइब्रेरी इंटरफ़ेस विशेष रूप से बोझिल होना चाहते हैं।

दूसरा, यदि आप तय करते हैं कि आप लाइब्रेरी रैपर लिखना चाहते हैं, तो इसे सरल रखें। लाइब्रेरी के मूल कार्यों की पहचान करें जिन्हें आप वास्तव में उपयोग करने की योजना बना रहे हैं, और इस बारे में सोचें कि उन कार्यों और इंटरफ़ेस को केवल आपके इच्छित उपयोग के साथ इंटरफ़ेस प्रदान करना सर्वोत्तम है। एक इंटरफ़ेस डिज़ाइन करें जिसे आप काम करना चाहते हैं, फिर इसे लाइब्रेरी पर कार्यान्वित करें।

0

चूंकि एआरसी (स्वचालित संदर्भ गणना) ऐप्पल कंपाइलर्स और पुस्तकालयों में जोड़ा गया था, उद्देश्य-सी और सी अब इतनी आसानी से विनिमय करने योग्य नहीं हैं। (Here's एआरसी दस्तावेज और ट्यूटोरियल की एक सूची।) आपको मेमोरी आवंटन मुद्दों पर अधिक अच्छी तरह से विचार करने की आवश्यकता है, और आप पुस्तकालयों को "पुल" करना चाहते हैं। this SO question और वहां से कुछ लिंक देखें, ओबेज-सी और सी पुस्तकालयों के बीच ऐप्पल पुल कैसे।