उद्देश्य-सी में एक हेडर फ़ाइल (वास्तव में, #import को कॉल करने) की लागत क्या है?
संकलक इन फ़ाइलों को अनावश्यक रूप से पढ़ने के लिए बाहर हो सकता है। एक बार #import
एड के बाद, प्रत्येक अनुवाद के लिए अतिरिक्त फ़ाइलों को पार्स, संकलित आदि की आवश्यकता होगी (उदा। .m
फ़ाइल) यह आपके निर्माण और लिंक के समय को और अधिक बनाने में दिखाई दे रही है। 10 गुना लंबा आश्चर्यजनक नहीं है।
मैं लगातार विभिन्न स्थानों पर एक ही शीर्षलेख सहित थक गया हूं, इसलिए मैंने केवल ग्लोबल रेफरेंस एच फाइल बनाने का फैसला किया जिसमें कई सामान्य संदर्भित शीर्षलेख शामिल हैं।
आमतौर पर, यह एक बहुत ही खराब दृष्टिकोण है। आम समस्या यह है कि जब भी GlobalReferences.h द्वारा शामिल की गई किसी भी फाइल को बदल दिया जाता है, तो आपकी पूरी परियोजना और सभी निर्भरताओं के बीच पुनर्निर्मित, रिंकिंक आदि की आवश्यकता होगी।
मेरी प्राथमिकता प्रोग्राम को छोटे पुस्तकालयों या संकुलों में अलग करना है जहां यह परस्पर निर्भरता मौजूद है (उदा। StoreKit.framework एक छोटा पैकेज/लाइब्रेरी है) - लेकिन हेडर में उन पुस्तकालयों/ढांचे/पैकेजों को भरना कुछ भी हल नहीं करता है। साथ ही, आगे की घोषणाएं और कक्षा निरंतरता में आपके डेटा को संग्रहीत करना या @implementation
निर्भरता को काफी कम कर सकता है (क्योंकि आप केवल आवश्यक अनुवादों के लिए लाइब्रेरी/हेडर को शामिल करने का स्थानीयकरण कर सकते हैं)।
आखिरकार, आलसी के बाद सफाई करना बहुत समय लगता है, खासकर जब बहुत से लोग हैं और आपने तब तक इंतजार किया है जब तक कि आपके प्रोजेक्ट के निर्माण के समय असहनीय रूप से धीमे न हों। असल में, आपको वापस जाना होगा और अनावश्यक निर्भरताओं को अलग करना होगा, पुनर्निर्माण, दोहराना (दिनों के लिए)।
क्या अन्य फ़ाइलों के संदर्भों को शामिल करने के लिए कोई सराहनीय लागत है यदि उनका उपयोग भी नहीं किया जाता है?
बिल्कुल। आपकी परियोजनाओं में बड़ी वृद्धि होती है, बदतर आलसी समावेशन बन जाता है। एक बड़ी परियोजना में शामिल कुछ आलसी आपकी अधिकांश संकलित फ़ाइलों में दसियों या सैकड़ों हजारों लाइनों को जोड़ सकती हैं, और कई स्रोतों के लगातार पुनर्मूल्यांकन को ट्रिगर कर सकती हैं। इससे बिल्ड प्रक्रिया में जटिलता की एक बड़ी मात्रा बढ़ जाती है - सीपीयू की मांग बढ़ जाती है, रैम का उपयोग बढ़ जाता है, डिस्क आईओ रास्ता बढ़ जाता है ... और फिर, यह एक बड़ी समस्या बन जाती है क्योंकि आपके कोडबेस/परियोजनाएं जटिलता में वृद्धि करती हैं।
इसे साफ़ करने के लिए धन्यवाद। – LucasTizma