एक BOOL संपत्ति का उपयोग करना


111

Apple ने इस तरह से BOOL संपत्ति घोषित करने की सिफारिश की:

@property (nonatomic, assign, getter=isWorking) BOOL working;

जैसा कि मैं Objective-C 2.0 प्रॉपर्टीज और डॉट नोटेशन का उपयोग कर रहा हूं, मैं इस प्रॉपर्टी का उपयोग कर रहा हूं self.working। मुझे पता है कि मैं भी इस्तेमाल कर सकता हूं [self isWorking]- लेकिन मेरे पास नहीं है।

इसलिए, जैसा कि मैं हर जगह डॉट नोटेशन का उपयोग कर रहा हूं, मुझे अतिरिक्त संपत्ति क्यों परिभाषित करनी चाहिए? क्या सिर्फ लिखना ठीक रहेगा

@property (nonatomic, assign) BOOL working;

या क्या getter=isWorkingमेरे मामले में लिखने का कोई लाभ है (डॉट नोटेशन का उपयोग)?

धन्यवाद!


4
क्या यह अर्थ आधारित अनुशंसा नहीं है? इसलिए myCar.isWorking myCar.working से शब्दार्थ ज्यादा सही होगा
justcompile

जवाबों:


206

Apple केवल isXशैलीगत उद्देश्यों के लिए एक गटर की घोषणा करने की सिफारिश करता है। इससे कोई फर्क नहीं पड़ता कि आप गेट्टर नाम को कस्टमाइज़ करते हैं या नहीं, जब तक आप सही नाम के साथ डॉट नोटेशन या मैसेज नोटेशन का उपयोग नहीं करते हैं। यदि आप डॉट नोटेशन का उपयोग करने जा रहे हैं तो इससे कोई फर्क नहीं पड़ता है, फिर भी आप इसे संपत्ति के नाम से एक्सेस करते हैं:

@property (nonatomic, assign) BOOL working;

[self setWorking:YES];         // Or self.working = YES;
BOOL working = [self working]; // Or = self.working;

या

@property (nonatomic, assign, getter=isWorking) BOOL working;

[self setWorking:YES];           // Or self.working = YES;, same as above
BOOL working = [self isWorking]; // Or = self.working;, also same as above

4
निश्चित रूप से अपनी शैलीगत उद्देश्यों की तुलना में मुख्य मूल्य कोडिंग के अनुरूप होने के लिए यह अधिक है?
जसारीन

5
यह थोड़ा अजीब है कि Apple उन गेटर्स को घोषित करने की सिफारिश करता हैisX लेकिन Xcode उन्हें ऑटो-पूर्ण पॉपअप में सूचीबद्ध नहीं कर पाता है। (मेरे उदाहरण में) workingवहां सूचीबद्ध है, लेकिन isWorkingनहीं है। इसलिए मुझे BOOL गेटर्स घोषित करने में कोई लाभ नहीं दिखता है। मुझे उनका उपयोग करने में सक्षम होने के लिए और अधिक प्रयास करना होगा (पाने वाले को घोषित करना) लेकिन मुझे कम (कोई भी ऑटो-पूरा नहीं) मिलता है।
पैट्रिक

4

Apple शैलीगत उद्देश्यों के लिए सिफारिश करता है। यदि आप यह कोड लिखते हैं:

@property (nonatomic,assign) BOOL working;

तब आप [वस्तु का उपयोग नहीं कर सकते हैं]।
यह एक त्रुटि दिखाएगा। लेकिन अगर आप नीचे दिए गए कोड का उपयोग करते हैं

@property (assign,getter=isWorking) BOOL working;

इसलिए आप [ऑब्जेक्ट वॉकिंग] का उपयोग कर सकते हैं।


-26

आदिम प्रकार के गुणों का उपयोग करने का कोई लाभ नहीं है। @propertyआवंटित ढेर के साथ प्रयोग किया जाता है NSObjectsजैसे NSString*, NSNumber*, UIButton*,, और आदि क्योंकि स्मृति में कामयाब accessors मुक्त करने के लिए बनाई गई हैं। जब आप एक बनाते हैं BOOL, तो मान हमेशा स्टैक पर आवंटित किया जाता है और मेमोरी लीकेज को रोकने के लिए किसी विशेष एक्सेसर्स की आवश्यकता नहीं होती है। isWorkingबस एक बूलियन मूल्य की स्थिति को व्यक्त करने का लोकप्रिय तरीका है।

अन्य OO भाषा में आप एक चर private bool working;और दो SetWorkingएक्सेसर्स बनायेंगे : सेटर के लिए और एक्सेसर के IsWorkingलिए।


1
आप उसके सवाल का जवाब नहीं दे रहे हैं, अर्थात् संपत्ति के अलावा स्पष्ट रूप से नामकरण करने वाले का उद्देश्य क्या है (वह यह नहीं पूछ रहा है कि क्या संपत्ति एक अच्छा विचार है)। इसके अलावा, गुण KVO और KVC के लिए अनुमति देते हैं, इसलिए आप जो बिंदु बनाते हैं वह भ्रामक है।
मार्टिन गजलडबेक

आप सही हैं कि मैंने आदिम गुणों वाले KVO और KVC के उपयोग की अनदेखी की। मुझे लगता है कि धागे में हर कोई isWorking के बारे में अपने प्रश्न को संबोधित कर रहा है - यह एक नामकरण सम्मेलन है।
थॉमसन कॉमर

25
यह पूरी तरह से गलत है; @propertyआदिम प्रकार के साथ उपयोग करने के लिए बहुत अधिक है और अकेले स्थिरता के लिए, महत्वपूर्ण फायदे हैं। इसके अलावा, कुछ आदिम प्रकार (कुछ 32 बिट पर 64 बिट प्रकार और कई 32 और 64 बिट सीपीयू पर 128 बिट प्रकार) असाइनमेंट पर गैर-परमाणु हैं; @propertyउन मामलों में भी परमाणु लाभप्रद हो सकता है।
bbum

1
दिलचस्प है - लेकिन कैसे बिल्ली मैं जानता हूँ कि माना जाता है? :) क्या यह atomicऔर nonatomicविशेषताओं की एक विशेषता है?
थॉमसन कोमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.