मैं इस तरह एक वर्ग है कहते हैं:क्या मुझे आंतरिक रूप से आवृत्ति चर का उपयोग करते समय गुण या प्रत्यक्ष संदर्भ का उपयोग करना चाहिए?
@interface MyAwesomeClass : NSObject
{
@private
NSString *thing1;
NSString *thing2;
}
@property (retain) NSString *thing1;
@property (retain) NSString *thing2;
@end
@implementation MyAwesomeClass
@synthesize thing1, thing1;
@end
जब thing1
और thing2
आंतरिक तक पहुँचने (यानी, MyAwesomeClass
के कार्यान्वयन के अंदर), बेहतर, संपत्ति का उपयोग करने के लिए है या सिर्फ उदाहरण चर संदर्भ सीधे (ऐसे मामलों को मानते हुए जिसमें हम "कस्टम" एक्सेस या म्यूटेटर में कोई काम नहीं करते हैं, यानी, हम बस सेट करते हैं और चर प्राप्त करते हैं)। प्री-ऑब्जेक्टिव सी 2.0, हम आमतौर पर केवल इवरों तक पहुंच सकते हैं, लेकिन सामान्य कोडिंग शैली/सर्वोत्तम अभ्यास अब क्या है? और क्या यह सिफारिश बदलती है यदि एक आवृत्ति चर/संपत्ति निजी है और कक्षा के बाहर भी पहुंच योग्य नहीं है? क्या आप प्रत्येक इवर के लिए संपत्ति बना सकते हैं, भले ही वे निजी हों, या केवल सार्वजनिक-सामना वाले डेटा के लिए? क्या होगा यदि मेरा ऐप कुंजी-मूल्य कोडिंग सुविधाओं का उपयोग नहीं करता है (क्योंकि केवीसी केवल संपत्ति पहुंच के लिए आग लगती है)?
मुझे निम्न-स्तर के तकनीकी विवरणों से परे देखने में रुचि है। उदाहरण के लिए, यह देखते हुए (उप इष्टतम) कोड की तरह:
@interface MyAwesomeClass : NSObject
{
id myObj;
}
@proprety id myObj;
@end
@implementation MyAwesomeClass
@synthesize myObj;
@end
मुझे पता है कि myObj = anotherObject
कार्यात्मक self.myObj = anotherObj
के समान है।
लेकिन गुणक केवल आपके लिए एक्सेसर्स और म्यूटेटर लिखने के लिए संकलक को निर्देश देने के लिए केवल फैंसी वाक्यविन्यास नहीं हैं; वे डेटा को बेहतर encapsulate करने का एक तरीका भी हैं, यानी, आप उन गुणों पर भरोसा रखने वाले वर्गों को फिर से लिखने के बिना कक्षा के आंतरिक कार्यान्वयन को बदल सकते हैं। मुझे जवाब में दिलचस्पी है जो कक्षा के अपने आंतरिक कोड से निपटने के दौरान इस encapsulation मुद्दे के महत्व को संबोधित करते हैं। इसके अलावा, उचित रूप से लिखित गुण केवीसी अधिसूचनाओं को आग लगा सकते हैं, लेकिन प्रत्यक्ष ivar पहुंच नहीं होगी; क्या इससे कोई फर्क नहीं पड़ता कि मेरा ऐप केवीसी फीचर्स का उपयोग नहीं कर रहा है अब, अगर भविष्य में हो सकता है?
धन्यवाद। आप और एलन डिंग दोनों के पास विशेष रूप से अच्छे जवाब थे। – mipadi