2012-05-14 11 views
24

एक्सकोड के "कॉपी हेडर" चरण में, "प्रोजेक्ट" अनुभाग और "निजी" अनुभाग के तहत शीर्षकों के बीच क्या अंतर है? आप कब उपयोग करना चाहते हैं?एक्सकोड की कॉपी हेडर चरण को समझना

इसके अलावा, मैं समझ सकता हूं कि आप सार्वजनिक शीर्षलेखों (उदाहरण के लिए एक स्थिर पुस्तकालय के लिए) क्यों कॉपी करना चाहते हैं - लेकिन आप निजी शीर्षलेखों की प्रतिलिपि क्यों बनाना चाहेंगे?

संपादित करें: @ मिपाडी नीचे सार्वजनिक और निजी भागों की भूमिकाओं को बताता है। हालांकि मुझे अभी भी "प्रोजेक्ट" भाग बनाम हेडर को शामिल करने के बीच अंतर दिखाई दे रहा है। "कॉपी हेडर" चरण के किसी भी हिस्से में हेडर नहीं है।

उत्तर

15

यदि सार्वजनिक हेडर में एक निजी शीर्षलेख शामिल है, तो आपको निजी शीर्षलेखों की प्रतिलिपि बनाना होगा, लेकिन आप यह सुनिश्चित करना चाहते हैं कि लाइब्रेरी या ढांचे के उपभोक्ताओं को पता है कि वे निजी हेडर सार्वजनिक एपीआई का हिस्सा नहीं हैं।

"परियोजना" हेडर निजी हेडर हैं कि एक सार्वजनिक हैडर द्वारा शामिल नहीं (- .c या .m - फ़ाइल वे आम तौर पर आंतरिक कार्यान्वयन का हिस्सा हैं और इस प्रकार केवल एक कार्यान्वयन में शामिल है) कर रहे हैं।

ढांचे का निर्माण करते समय, सार्वजनिक शीर्षलेखों को ढांचे की Headers निर्देशिका में कॉपी किया जाता है, जबकि निजी शीर्षलेखों को PrivateHeaders निर्देशिका में कॉपी किया जाता है।

+0

बहुत बहुत धन्यवाद! मुझे समझ में नहीं आया कि "कॉपी हेडर" चरण के "प्रोजेक्ट" खंड में हेडर को शामिल करने का क्या प्रभाव है, बनाम चरण में हेडर शामिल नहीं है। – Danra

+1

@Danra: जब हेडर दृश्यता "प्रोजेक्ट" के रूप में सेट की जाती है, तो इसका उपयोग पुस्तकालय या ढांचे को संकलित करते समय किया जाएगा, लेकिन अंतिम उत्पाद के हिस्से के रूप में शामिल नहीं किया जाएगा (यानी, यह केवल आंतरिक कार्यान्वयन के लिए उपयोग किया जाता है)। – mipadi

+0

हेडर भी उपलब्ध होगा यदि यह चरण में नहीं है। इसे आयात करना अभी भी काम करेगा। जैसा कि मैं इसे समझता हूं, "कॉपी हेडर" चरण एक पोस्ट-बिल्ड इवेंट का प्रकार है जो लिंक चरण के बाद होता है। वैसे, किसी प्रोजेक्ट में एक्सटेंशन/प्रोटोकॉल जोड़ते समय, अक्सर डिफ़ॉल्ट रूप से एक्सकोड किसी भी लक्ष्य पर उचित .h फ़ाइल नहीं जोड़ता है, और यह "कॉपी हेडर" चरण में प्रकट नहीं होता है। – Danra

0

Setting the Visibility of a Header File से:

  • सार्वजनिक: इंटरफ़ेस को अंतिम रूप दिया और अपने उत्पाद के ग्राहकों द्वारा इस्तेमाल किया जा करने के लिए है। उत्पाद में सार्वजनिक हेडर को बिना किसी प्रतिबंध के पठनीय स्रोत कोड के रूप में शामिल किया गया है।

  • निजी: इंटरफ़ेस आपके ग्राहकों के लिए नहीं है या यह विकास के शुरुआती चरणों में है। उत्पाद में एक निजी हेडर शामिल है, लेकिन इसे "निजी" चिह्नित किया गया है। इस प्रकार प्रतीक सभी ग्राहकों के लिए दृश्यमान होते हैं, लेकिन ग्राहकों को यह समझना चाहिए कि उन्हें उनका उपयोग नहीं करना चाहिए।

  • प्रोजेक्ट: इंटरफ़ेस केवल वर्तमान प्रोजेक्ट में कार्यान्वयन फ़ाइलों द्वारा उपयोग के लिए है। ऑब्जेक्ट कोड को छोड़कर, एक प्रोजेक्ट हेडर लक्ष्य में शामिल नहीं है। प्रतीक केवल ग्राहकों के लिए दृश्यमान नहीं हैं।

+4

मुझे अभी भी "प्रोजेक्ट" भाग बनाम हेडर को शामिल करने के बीच अंतर दिखाई दे रहा है। "कॉपी हेडर" चरण के किसी भी हिस्से में शीर्षलेख नहीं है। – Danra

6

@Danra, यदि आप "परियोजना" के तहत अपने हेडर डाल दिया, उन हेडर अपने कार्यान्वयन के लिए दिखाई दे हेडर के वास्तविक स्थान का हो जाएगा 'परवाह किए बिना'।

मान लें, अगर आप इस तरह अपने फ़ोल्डर संरचना है: /Sources/libAF/AFSomething.h /Sources/libAF/AFSomething.m /Sources/exec/main.m

अगर आपने "प्रोजेक्ट" के तहत 'AFSomething.h' डालें, आप इसे मुख्य.एम में उपयोग कर सकते हैं: #import "AFSomething.h"

आम आदमी के कार्यकाल में, एक्सकोड में परियोजना शीर्षलेख शामिल होंगे हालांकि आप वास्तविक पथ जानकारी छोड़ देते हैं।

+1

धन्यवाद, यह ऊपर दिए गए स्वीकृत उत्तर को पूरा करता है। – Danra

0

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

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