मैं दूसरों के लिए बात नहीं कर सकता, लेकिन मैं एक ही नाम का उपयोग नहीं करता हूं। यदि मैं एक इंस्टेंस वैरिएबल घोषित करता हूं, तो यह एक अग्रणी अंडरस्कोर के साथ है, इसलिए यह स्पष्ट है कि मैं इंस्टेंस वैरिएबल या सेटर/गेटर विधि का जिक्र कर रहा हूं।
एक्सकोड 4.4+ के साथ आपको आवृत्ति चर घोषित करने की आवश्यकता नहीं है या @synthesize
पर कॉल करने की आवश्यकता नहीं है और संकलक स्वचालित रूप से एक अग्रणी अंडरस्कोर के साथ एक आवृत्ति चर बना देगा, और आपके लिए सेटटर/गेटर विधि प्रदान करेगा।
हालांकि मुझे नहीं लगता कि यह तंत्र एक बहुत अच्छा विचार है, क्योंकि यह डेवलपर्स को अपनी कक्षा के गुणों का खुलासा करने के लिए प्रोत्साहित करता है जिन्हें प्रकट नहीं किया जाना चाहिए।
उदाहरण के लिए, इस शुरुआत IOS 6 विकास से लिया जाता है:,
@interface BIDViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *button;
- (IBAction)buttonPressed:(UIButton *)sender;
@end
अब जबकि मैं समझता हूँ कि आप एक साथ बहुत से अवधारणाओं के साथ शुरुआत कर भ्रमित करने के लिए नहीं करना चाहते हैं, तो आप तुरंत है UIButton
ऑब्जेक्ट और इस व्यू कंट्रोलर के उपयोगकर्ताओं को एक्शन विधि दोनों को उजागर करके ऑब्जेक्ट ओरिएंटेड एनकैप्यूलेशन का उल्लंघन किया, और न ही इसका खुलासा किया जाना चाहिए।
क्या होता है, उदाहरण के लिए, अगर एक का उपयोग कर वर्ग करता है:
BIDViewController *vc = ...;
vc.button = nil;
या
vc.buttonPressed(mySegmentedControl);
सभी नरक टूट जाता है ढीला। अब जबकि कार्यक्रम को तोड़ने के 1000 तरीके हैं और हम उन सभी के खिलाफ बचाव नहीं कर सकते हैं, हम पहले से ही कमजोर सिस्टम नहीं बनाना चाहते हैं (उद्देश्य-सी परिभाषित करने के मामले में मूल्यवान छोटी प्रदान करता है कि कौन कॉल कर सकता है और कौन नहीं कह सकता आपकी विधियों के) कमजोर।
उपरोक्त क्रियान्वयन बेहतर निजी उदाहरण चर और तरीकों का उपयोग कर किया जाता है, जो दोनों के इंटरफ़ेस बिल्डर द्वारा सम्मानित किया गया है:
@implementation BIDViewController()
{
IBOutlet UIButton *_button;
}
- (IBAction)_buttonPressed:(UIButton *)sender;
@end
और किसी भी का उपयोग कर वर्गों है कि मॉडल को तोड़ने की एक मुश्किल समय होगा।
लेकिन निश्चित रूप से यह एक डेवलपर के लिए और अधिक सोच और टाइपिंग है, और इसलिए एप्पल नई सुविधाओं शुरू की है ताकि वे प्राप्त कर सकते हैं कि वे क्या कम समय में किया चाहते हैं (बहुत कम टाइपिंग है जब आप बस एक करने के लिए एक आउटलेट खींचें हेडर फ़ाइल और आपके लिए घोषणा और कार्यान्वयन कंकाल दोनों प्रदान किए जाते हैं)।
dup: http://stackoverflow.com/questions/5555736/objective-c-why-do-we-declare-ivars-in-the-h-member-area- अगर-संपत्ति-लगता है- – justin