2011-04-07 9 views
11

संभव डुप्लिकेट:
How does an underscore in front of a variable in a cocoa objective-c class work?संपत्ति नाम पर अंडरस्कोर उपसर्ग?

किसी अंडरस्कोर के उपयोग की एक विवरण के लिए मुझे बात कर सकते हैं, मैं हमेशा मान लिया है कि वे उजागर करने के लिए है कि आप इवर [_window release]; एक्सेस कर रहे हैं उपयोग किया जाता है एक सेटर/गेटर विधि [[self window] release]; या [self.window release]; के माध्यम से iVar तक पहुंचने के बजाय मैं बस यह सत्यापित करना चाहता हूं कि मेरी समझ सही है।

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UILabel *markerLabel; 

@synthesize window = _window; 
@synthesize markerLabel = _markerLabel; 
+0

यही मैं उनके लिए उपयोग करता हूं। –

+0

यह इस अन्य डुप्ली को इंगित करने के लिए उपयोग किया जाता है, जो भी दिलचस्प है http://stackoverflow.com/questions/3521254/prefixing-property-names-with-an-underscore-in-objective-c –

उत्तर

0

यह एक सम्मेलन है, और आपकी समझ ठीक लगती है।

इस सम्मेलन का एक और योग्यता है कि आप गलती से सेटर का उपयोग किए बिना इवर उपयोग नहीं कर सकते, अगर इवर _view बजाय view है क्योंकि

view = viewController.view ; // usually bad 

संकलन नहीं होगा।

मैं आमतौर पर ivar घोषित नहीं करता हूं, और केवल @property और @synthesize का उपयोग करता हूं। एक स्पष्ट ivar घोषित किए बिना, संकलक (कम से कम एक हालिया) स्वचालित रूप से ivar (उसी नाम के साथ) उत्पन्न करता है। इसलिए उपरोक्त कोड बिना किसी समस्या के संकलित करता है, और सेटटर का उपयोग न करने के खिलाफ गार्ड के रूप में कार्य नहीं करता है, लेकिन आप कोड की एक पंक्ति से दूर हो सकता है .... जो लक्ष्य के लिए एक बुरी चीज हो सकती है और मैं आपको इसकी अनुशंसा नहीं करता: पी

10

आईवर नामों के लिए अंडरस्कोर का उपयोग पहले एक सम्मेलन है एक वास्तविक ivar और एक संपत्ति के बीच अंतर करने के लिए ऐप्पल। तब से कई लोगों ने इस सम्मेलन को अपनाया है।

कारण यह हो जाने पर एक इवर के लिए एक नया मूल्य देने की बजाय वास्तविक सेटर को गलती को रोकने के लिए है:

myIvar = newValue; 
बजाय

self.myIvar = myValue; 

अगर आप गलती से उपयोग करते हैं शीर्ष उदाहरण, आप एक स्मृति रिसाव का कारण बन सकता है। अंडरस्कोर आपको उस गलती से रोकता है।

+2

क्या इसका वास्तव में उपयोग किया गया था सेब? किसी भी मामले में, ऐप्पल इस सम्मेलन का उपयोग नहीं करता है। यह कोको कोडिंग दिशानिर्देशों में न तो उल्लेख किया गया है और न ही ऐप्पल के अपने कोड में उपयोग किया जाता है, उदाहरण के लिए: http://developer.apple.com/library/mac/#samplecode/TreeView/Listings/TreeViewDemo_View_TreeView_h.html#//apple_ref/doc/ यूआईडी/डीटीएस 40010131-TreeViewDemo_View_TreeView_h-DontLinkElementID_19 अंडरस्कोर आपको उस संपत्ति का उपयोग करने की गलती करने से नहीं रोकता है जहां आप आवृत्ति चर का उपयोग करना चाहते थे। – LearnCocos2D

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