2011-02-01 12 views
100

एप्पल एक BOOL संपत्ति इस तरह की घोषणा करने की सिफारिश की गई। मुझे पता है कि मैं [self isWorking] का भी उपयोग कर सकता हूं - लेकिन मुझे यह नहीं करना है।एक BOOL संपत्ति का उपयोग करना

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

@property (nonatomic, assign) BOOL working; 

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

धन्यवाद!

+3

क्या यह एक अर्थपूर्ण आधारित सिफारिश नहीं है? तो myCar.isWorking myCar से semantically अधिक सटीक होगा .working – justcompile

उत्तर

188

ऐप्पल स्टाइलिस्ट उद्देश्यों के लिए 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

निश्चित रूप से केवल स्टाइलिस्ट उद्देश्यों की तुलना में महत्वपूर्ण मूल्य कोडिंग अनुपालन के साथ और अधिक करना है? – Jasarien

+5

यह थोड़ा अजीब बात है कि ऐप्पल _recommends_ उन 'isX' गेटर्स को घोषित कर रहा है लेकिन एक्सकोड स्वचालित रूप से स्वत: पूर्णता पॉपअप में सूचीबद्ध करने में सक्षम नहीं है। (मेरे उदाहरण में) 'कामकाजी' वहां सूचीबद्ध है, लेकिन 'isWorking' नहीं है। तो मुझे बूल गेटर्स घोषित करने में कोई लाभ नहीं दिख रहा है। मुझे उनका उपयोग करने में सक्षम होने के लिए और कुछ करना है (गेटटर घोषित करें) लेकिन मुझे कम मिलता है (कोई स्वत: पूर्णता नहीं)। – Patrick

-27

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

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

@property (nonatomic,assign) BOOL working; 

तो फिर तुम [वस्तु isWorking] का उपयोग नहीं कर सकते हैं:

+1

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

+0

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

+24

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

2

एप्पल शैलीगत purposes.If के लिए सिफारिश की गई है तो आप इस कोड लिखें।
यह एक त्रुटि दिखाएगा। लेकिन अगर आप नीचे दिए गए कोड का उपयोग का मतलब है

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

तो तुम [वस्तु isWorking] का उपयोग कर सकते हैं।

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