मेरे पास काम पर गुणों और आवृत्ति चर के उपयोग से संबंधित कुछ चर्चा थी, इसलिए मैं इसके लिए विकी जवाब ढूंढना चाहता हूं। अब, मुझे पता है कि उद्देश्य-सी में कोई वास्तविक निजी सदस्य प्रकार नहीं है, सबकुछ काफी सार्वजनिक है। हालांकि, मैं अपने वर्गों को डिजाइन करने और ओओपी सिद्धांतों का पालन करने के तरीके के बारे में थोड़ा चिंतित हूं। मैं इन तीन डिजाइन दृष्टिकोणों की राय सुनना चाहूंगा:उद्देश्य-सी में निजी और सार्वजनिक सदस्यों को कैसे लागू किया जाना चाहिए?
ए। विभिन्न पदों के अनुसार और यहां तक कि एक नए स्टैनफोर्ड विश्वविद्यालय आईफोन विकास पाठ्यक्रमों के अनुसार, आपको हमेशा हर जगह संपत्तियों का उपयोग करना चाहिए। हालांकि आईएमएचओ, यह दृष्टिकोण ओओपी डिजाइन सिद्धांतों को तोड़ देता है क्योंकि इस मामले में, सभी सदस्य सार्वजनिक हो जाते हैं। मुझे अपने सभी आंतरिक/स्थानीय आवृत्ति चर को बाहर से प्रकाशित करने की आवश्यकता क्यों है? इसके अलावा, कुछ छोटे (लेकिन अभी भी) ओवरहेड हैं यदि आप गुणों के माध्यम से संश्लेषित सेटर्स का उपयोग करते हैं, बजाय स्थानीय इवर का उपयोग सीधे करते हैं। के लिए
//==== header file =====//
@interface MyClass : NSObject
@property (nonatomic, retain) NSString *publicMemberWithProperty;
@property (nonatomic, retain) NSString *propertyForPrivateMember;
@end
बी एक और दृष्टिकोण निजी सदस्यों के लिए (सापेक्ष गुण की घोषणा के बिना) हेडर फाइल में ivars घोषित करने के लिए है, और एक ही हेडर फाइल में, शुद्ध गुण (सापेक्ष ivars की घोषणा के बिना) घोषित करने के लिए: यहाँ एक नमूना है सार्वजनिक सदस्य ऐसे मामले में, ivars सीधे कक्षा में इस्तेमाल किया जाएगा। यह दृष्टिकोण समझ में आता है लेकिन गुणों से सभी लाभों का उपयोग नहीं करता है क्योंकि हमने नए सेट करने से पहले मैन्युअल रूप से पुराने मान जारी किए हैं।
//==== header file =====//
@interface MyClass : NSObject{
NSString *_privateMember;
}
@property (nonatomic, retain) NSString *publicMemberWithProperty;
@end
सी हेडर फाइल में सार्वजनिक सदस्यों के लिए (सापेक्ष ivars की घोषणा के बिना) शुद्ध गुण की घोषणा करने के लिए, और कार्यान्वयन फ़ाइल में निजी इंटरफेस में निजी सदस्यों के लिए (सापेक्ष ivars की घोषणा के बिना) शुद्ध गुण घोषित करने के लिए: यहाँ एक नमूना है । यह दृष्टिकोण आईएमएचओ पहले की तुलना में अधिक स्पष्ट है, लेकिन वही सवाल बनी हुई है: हमें आंतरिक/स्थानीय सदस्यों के लिए संपत्ति क्यों है? यहां एक नमूना है:
//==== header file =====//
@interface MyClass : NSObject
@property (nonatomic, retain) NSString *publicMemberWithProperty;
@end
//==== implementation file =====//
@interface MyClass()
@property (nonatomic, retain) NSString *propertyForPrivateMember;
@end
इस निर्णय से स्वतंत्रता मुझे एक छोटा सा गुस्सा दिलाती है और मैं कैसे चीजें किया जाना चाहिए के बारे में संबंधित स्रोतों से एक पुष्टिकरण प्राप्त करना चाहते हैं। हालांकि, मैं उस पर ऐप्पल दस्तावेज़ों में ऐसे सख्त वक्तव्य नहीं ढूंढ पा रहा था, इसलिए यदि कोई मौजूद है, तो किसी भी मौजूद सिद्धांत से, या किसी अन्य सिद्धांत के लिए एक लिंक पोस्ट करें।
यह प्रश्न सही तरीके से उत्तर देने के लिए बहुत ही व्यक्तिपरक और असंभव प्रतीत होता है। – Till
प्रश्न बहुत सरल है - निजी और सार्वजनिक सदस्यों को उद्देश्य-सी में कैसे लागू किया जाना चाहिए, और जहां मैं उस पर ऐप्पल सख्त आवाज पा सकता हूं। – Centurion
मैं अलग होना चाहता हूं लेकिन चर्चा में गहराई से नहीं जाऊंगा। मेरे दावे को साबित करने के संकेत के रूप में, आपने स्वयं को नोट किया कि उदा। स्टैनफोर्ड पाठ्यक्रम हर जगह गुणों का उपयोग करने की सलाह देते हैं। – Till