2012-02-03 10 views
5

.m फ़ाइल के अंदर कक्षा विस्तार में छद्म-निजी आवृत्ति चर डालने के बीच क्या अंतर है, या उन्हें नीचे दिखाए गए नए परिचय @ कार्यान्वयन ब्रैकेट में डालने का क्या अंतर है?कक्षा विस्तार में या @ कार्यान्वयन ब्लॉक में छद्म-निजी ivars जोड़ने के बीच क्या अंतर है?

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

// MyClass.m 

@interface MyClass() { 
    id internal2; 
} 
@end 


@implementation MyClass { 
    id internal3; 
} 

- (void)internalMethod { 
    NSLog(@"%@ %@", internal2, internal3); 
} 

@end 

स्रोत: http://www.mcubedsw.com/blog/index.php/site/comments/new_objective-c_features/

उत्तर

9

दो दृष्टिकोणों के बीच मुख्य अंतर यह है कि आप कक्षा विस्तार को एक अलग शीर्षलेख में शामिल कर सकते हैं, जबकि @ कार्यान्वयन Iivars को स्पष्ट रूप से .m फ़ाइल में @ कार्यान्वयन ब्लॉक के साथ जाना होगा (और केवल एक ही हो सकता है @ किसी दिए गए वर्ग के लिए कार्यान्वयन (एक्सटेंशन शामिल नहीं है))।

  • MyClass.h: इस के व्यावहारिक परिणाम आप "निजी" ivars के कई स्तरों हो सकता है वह यह है कि सार्वजनिक ivars
  • MyClass + Private.h: अर्द्ध निजी ivars
  • MyClass.m: वास्तव में निजी ivars

एक काल्पनिक उदाहरण के रूप में, दिखाएं कि MyClass UIView है। उस स्थिति में, UIView.h वह शीर्षलेख है जिसे हम सभी तक पहुंच सकते हैं, UIView + Private.h केवल ऐप्पल तक पहुंचने से "निजी" हेडर है, और UIView.m में सामान है जो केवल UIView के लिए विशेष रूप से जिम्मेदार लोगों को जानना आवश्यक है के बारे में।

+2

कक्षाओं में एक से अधिक कार्यान्वयन ब्लॉक हो सकते हैं। यह कक्षा विस्तार की नींव है। –

+0

हां, ज़ाहिर है। लेकिन श्रेणियों को शामिल किए बिना, एक वर्ग में केवल एक @ पूरक हो सकता है। – UIAdam

+1

@EllNeal: श्रेणी '@ कार्यान्वयन की! = कक्षा' @ कार्यान्वयन की –

3

व्यक्तिगत रूप से, मैं कार्यान्वयन को फ़ाइल में एक वर्ग विस्तार में मेरी ivars डाल करने के लिए पसंद करते हैं, मुझे लगता है कि यह क्लीनर है कि रास्ता नहीं है। मुझे नहीं लगता कि एक या दूसरे का उपयोग करने के लिए कोई प्रदर्शन लाभ या परिणाम हैं, यह आपके इच्छित तरीके से कोड करने में सक्षम होने के बारे में अधिक है।

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