यह आपकी वरीयता पर निर्भर करता है।
मैं इसे कोड में लिखना पसंद करता हूं।
- मुझे कोड का पुन: उपयोग करना है।
- एक एक्सआईबी/एनआईबी का उपयोग आम तौर पर एक परिभाषा नियम तोड़ता है (यदि आप कोई अनुकूलन कर रहे हैं)।
- एक्सआईबी/एनआईबी रखरखाव अक्सर अधिक कठिन और त्रुटि प्रवण (ओडीआर) होता है। मैं वास्तव में प्रत्येक बटन के लिए बटन शैलियों (उदाहरण) को बनाए रखने से नापसंद करता हूं।
- परिपत्र संदर्भ अधिक संभावना है।
- कोड/ऑब्जेक्ट्स/ib उदाहरण अक्सर कम पुन: प्रयोज्य/मॉड्यूलर होते हैं। हालांकि मैं एक ui वस्तु से बचने के लिए प्रकार हूं जो सबकुछ कर सकता है।
- डिफर्ड/संदिग्ध प्रारंभिक आदेश क्लाइंट के लिए एक बहुत डरावनी स्थिति के लिए बनाता है, जिसे उन्हें किसी ऑब्जेक्ट को कभी भी उपयोग के लिए तैयार नहीं किया जाना चाहिए या पूरी तरह से प्रारंभ नहीं किया जाना चाहिए (जब तक कि आप उन चेक को बनाए रखना पसंद न करें, जो समय बर्बाद करने का एक अच्छा तरीका है)।
- यदि प्रदर्शन महत्वपूर्ण है, तो अनुमान लगाएं कि तेज़ कौन सा है?
- संसाधन प्रबंधन बनाम लिंकर ... गंभीरता से, मैंने बंडल में निब्स के अस्तित्व को सत्यापित करने के लिए उप-कार्यक्रम और परीक्षण लिखे हैं।
आईबी, प्रोटोटाइप और ब्राउज़िंग वस्तु क्षमताओं और दिखावे के लिए महान (मैं एक ग्राफिक डिजाइनर नहीं कर रहा हूँ) है, हालांकि मुझे लगता है कि यह सबसे आसान है बस कोड में यह लिखने के लिए एक बार प्रोटोटाइप मौजूद है अगर आप में से किसी इरादा नहीं है इसे बनाए रखना या पुन: उपयोग करना।
मेरी सिफारिश: अत्यधिक पुन: प्रयोज्य और स्थिर कोड पुस्तकालय लिखें, और मुख्य रूप से प्रोटोटाइप और एक-ऑफ के लिए आईबी का उपयोग करें।
जवाब:
Sbrocket: मैं तुम क्यों जोर है कि वृत्तीय संदर्भ अधिक महत्वपूर्ण व्यक्ति का उपयोग करने का एक परिणाम के रूप होने की संभावना है जानने के लिए उत्सुक हूँ।
हाय स्क्रब्रेट: मैं यह कहकर शुरू करूंगा कि मैंने प्रोजेक्ट बिल्डर दिनों (एक्सकोड के पूर्ववर्ती) के बाद इंटरफ़ेस बिल्डर का उपयोग किया है।
विश्वसनीय संरचित स्वामित्व, पहचान, और प्रारंभिकता की कमी। मैं आईवी कनेक्शन होने के लिए ivars चाहता हूं क्योंकि यह 'वर्तमान संदर्भ' से परे कई वर्गों का उपयोग करना मुश्किल बनाता है, दूसरे शब्दों में, यह संसाधन को कोड (आदर्श रूप से अक्सर) से जोड़ता है। चूंकि आप प्रारंभिकरण आदेश को परिभाषित नहीं कर सकते हैं या आईबी में प्रारंभिक या अतिरिक्त प्रारंभिक तर्क परिभाषित नहीं कर सकते हैं, इसलिए आपको वस्तुओं को एक-दूसरे के बारे में जानना चाहिए, परिपत्र निर्भरता और संदर्भ बनाना चाहिए।
Sbrocket: या क्यों आलसी आरंभीकरण (यह सोचते हैं कि तथ्य यह है कि आप क्या कर रहे हैं की चर्चा करते हुए में है) तो डरावना है जब इसकी अपेक्षाकृत आसान (या कई मामलों में स्वत: वास्तव में) यह सुनिश्चित करें कि वस्तु प्रारंभ और जुड़ा हुआ है।
पुन: डरावनी मैं आलसी प्रारंभिकता के बारे में बात नहीं कर रहा था। मैं स्थगित और संदिग्ध प्रारंभिक आदेश के बारे में बात कर रहा था।
निब प्रारंभिक अर्द्ध आदेश दिया गया है। वास्तविक आदेश/प्रक्रिया भिन्न हो सकती है, और इसका उपयोग पुन: प्रयोज्य आत्मनिर्भर कार्यक्रमों के भीतर विश्वसनीय रूप से नहीं किया जा सकता है ... फिर, आप बहुत अधिक कोड लिखना समाप्त कर देंगे जो नाजुक है, पुन: उपयोग करना असंभव है, भविष्यवाणी करने के लिए कभी भी आश्वस्त नहीं किया जा सकता है, और अवश्य ही हमेशा राज्य को मान्य करें (फिर भी परिपत्र निर्भरता के लिए एक और प्रविष्टि)। यदि यह एक बंद कार्यान्वयन नहीं है, तो जटिलताओं से परेशान क्यों हैं?
प्रोग्रामिंग के लिए यह दृष्टिकोण अराजक है और कार्यान्वयन (बदले में) किसी भी समय किसी भी चीज़ को संभालने के लिए तैयार होना चाहिए। खुद को दुर्घटनाओं से बचाने के लिए एक बात है, लेकिन इस संदर्भ में रक्षात्मक, उत्पादन स्तर कोड लिखने के लिए ... कोई रास्ता नहीं।
एक सतत कार्यक्रम लिखना कहीं अधिक आसान है जो प्रारंभिक संदर्भ में वैधता निर्धारित करता है, जिसे कार्यान्वयन तब पता चल सकता है (यदि आरंभ किया गया है) कि वस्तु आम तौर पर उपयोग करने के लिए तैयार होती है। विशेष मामले जटिलता कम हो जाती है। कार्यक्रम जटिलता बढ़ने के साथ-साथ ऐसे कई डिज़ाइन अलग हो जाते हैं, जबकि लाइब्रेरी लेखकों ने गियर को आगे बढ़ने के लिए 'सुरक्षा उपायों' की परतों पर परतें जोड़ दी हैं - थ्रेडिंग ऐसे हेइसेनबग के लिए एक महान प्रविष्टि है। पुन: प्रयोज्य उत्पादन स्तर कोड में अनावश्यक अस्पष्टताएं अवांछित हैं; मनुष्यों को किसी कार्यक्रम के विशेष मामलों के संदर्भ को पार नहीं करना चाहिए, और परिभाषित व्यवहार से संबंधित जटिलताओं और विशेष मामलों को केवल फैलता है या अनदेखा किया जाता है (माना जाता है कि उन्हें सही तरीके से ट्रैक किया गया है और दस्तावेज किया गया है, जो इसे शुरू से ठीक से लिखने से अधिक संयुक्त प्रयास है)। मुझे लगता है कि हम सभी सहमत हैं कि भारी इंटरफेस और कार्यान्वयन से बचा जाना चाहिए।
Sbrocket: मैं भी कुछ कठिन संख्या कि पता चलता है कि एनआईबी लोड हो रहा है धीमी है देखने के लिए दिलचस्पी होगी - ज़ाहिर है, यह पहली बार इस विचार से समझ बनाने के लिए प्रतीत होता है, लेकिन हम हमेशा प्रदर्शन के इस तरह के खराब भविष्यवक्ताओं रहे कुछ कठिन परीक्षण के बिना बाधाएं।
मैंने कभी नहीं कहा (स्पष्ट) है कि यह धीमी :) था
ठीक है, गंभीरता में, निब गैर अभिलेख एक आश्चर्यजनक रूप से धीमी प्रक्रिया (मेरे लिए), था, हालांकि धीमी और गैर अभिलेख समय की हमारे विचारों में नाटकीय रूप से भिन्न हो सकते हैं ।
उदाहरण: मेरे पास एक दस्तावेज़ आधारित ऐप था, और दस्तावेज़ लोडिंग की तुलना में निब लोडिंग कई गुना धीमी थी, जब दस्तावेज़ आकार कई बार निब आकार थे। कोड में कार्यान्वयन को स्थानांतरित करने से प्रक्रिया बहुत तेज हो गई। एक बार यह कोड पर था और मेरे पास प्रारंभिक आदेश का नियंत्रण था, मैंने एकाधिक मल्टीथ्रेडिंग जटिलताओं (चेकपॉइंट्स, ताले, रेस कंडीशन एंट्री इत्यादि) को हटा दिया, जिसने दस्तावेज़ को और भी तेज़ी से लोड किया।
अब आपके पास एक स्पष्ट उत्तर है, मैं आपको याद दिलाऊंगा कि आपके पास प्रदर्शन को मापने के लिए आवश्यक सभी टूल्स हैं।
याद रखें कि प्रदर्शन विश्लेषण और एन्हांसमेंट सीखा है।
आपके पास एक वैध प्रश्न है। आईबी में इंटरफेस का प्रबंधन एक अलग प्रतिमान है जिसके लिए नए कौशल और परिचितता की आवश्यकता होती है। हालांकि, एहसास है कि आईबी के बिना हाथ से इंटरफेस बनाना एक दुर्लभ कौशल है, और इस तरह के कोड से निपटने में सक्षम लोगों को ढूंढने या खोजने में लोगों की तलाश है। मैं अनुमान लगाता हूं कि आईबी में बनाए रखने के लिए बड़ी परियोजनाएं वास्तव में आसान हैं, लेकिन यह अभी भी एक ट्रेडऑफ है - बातचीत हमेशा आईबी में दिखाई नहीं देती है, लेकिन जब आप इसे कोड में करते हैं, तो यह अतिरिक्त गोंद कोड जोड़ता है और क्षमता को हटा देता है आपके लिए चीजों को अनुकूलित करने के लिए ओएस और रनटाइम के लिए। –