ios - क्या मुझे इंटरफ़ेस में चर या उद्देश्य-सी आर्क में संपत्ति का उपयोग करना चाहिए?




objective-c automatic-ref-counting (2)

दृष्टिकोण 1:

@interface MyController : UIViewController {
    UILabel *myText;
}

@property (nonatomic, strong) UILabel *myText;

दृष्टिकोण 2:

@interface MyController : UIViewController
@property (nonatomic, strong) UILabel *myText;

दृष्टिकोण 3:

@interface MyController : UIViewController {
    UILabel *myText;
}

मैंने इस तरह की चीजों के बारे में बात करने वाले कुछ लेख पढ़े हैं लेकिन मुझे अभी भी यह नहीं पता कि मुझे किस दृष्टिकोण को अपनाना है।

मैंने यह भी पाया कि किसी ने कहा कि दृष्टिकोण 1 एक पुराना तरीका है, इसलिए मैं एआरसी का उपयोग कर आईओएस एसडीके 6 के लिए सबसे अच्छा अभ्यास जानना चाहता हूं।

मुझे पता है कि प्रॉपर्टी का उपयोग करके वैरिएबल घोषित करना गेटटर और सेटर बनाने के लिए एक आसान तरीका है और किसी ने इसका इस्तेमाल करने का सुझाव दिया है। हालांकि, मैं पूछना चाहूंगा कि कोई वैरिएबल किसी अन्य वर्ग द्वारा कॉल करने के लिए नहीं है, क्या यह संपत्ति का उपयोग कर चर के लिए आवश्यक है? और इंटरफ़ेस के अंदर इसे निजी चर के रूप में सेट करें? या यह एक चर के लिए केवल इंटरफ़ेस के अंदर घोषित करने के लिए बेहतर है? मैं सबसे अच्छा अभ्यास सीखना चाहता हूं इसलिए कृपया मुझे माफ़ कर दो अगर यह एक मूर्ख सवाल है।

इसके अलावा, कुछ डेवलपर्स इस तरह से @ सिंथेसाइज लिखते हैं

@synthesize myText=_myText;

लेकिन कुछ इसे लिखते हैं:

@synthesize myText;

मैं भी अंतर जानना चाहता हूं और कौन सा बेहतर है?

आपका बहुत बहुत धन्यवाद!


यदि आप अपने @ सिंथेसाइज्ड गुणों की सामग्री की एक अच्छी तालिका पसंद करते हैं, तो आप @ सिंथेसाइज़ का भी उपयोग करना चाह सकते हैं जिसे आप संदर्भित कर सकते हैं और स्पष्टता और संगठन के लिए टिप्पणी कर सकते हैं।

इसके अलावा, एक @ सिंथेसाइज आपको संपत्ति और जाल पर ब्रेकपॉइंट सेट करने की अनुमति देता है जब उसका मूल्य बदल जाता है।

जब संकलक आपके लिए सबकुछ करता है, तो आप वास्तव में क्या हो रहा है और इससे अनजान होने से दूर हो जाते हैं। हालांकि, हर समय खुद को टाइप करने के लिए भी अच्छा नहीं है।


सबसे आधुनिक तरीका 1 :

  • जब भी संभव हो, संपत्ति घोषित करें
  • iVars अलग से घोषित मत करो 2
  • @ सिंथेसाइज 3 मत करो
  • आप जितनी संभव हो उतनी संपत्तियों को ढूंढें। एच फाइल 4
  • अपनी .m फ़ाइल 5 में कक्षा एक्सटेंशन में जितनी संभव हो उतनी गुणों का पता लगाएं

1 एक्सकोड 4.5.2 के रूप में। इनमें से अधिकांश 4.4 पर लागू होते हैं, इनमें से कुछ 4.2 पर संकलित नहीं होंगे (हिम तेंदुए के नीचे उपलब्ध अंतिम संस्करण)। यह प्रीप्रोसेसर सामान है, इसलिए यह कम से कम आईओएस 5 पर संगत है (मैंने आईओएस 4 पर परीक्षण नहीं किया है लेकिन यह भी ठीक होना चाहिए)।

2 आईवर के साथ-साथ संपत्ति घोषित करने में कोई बात नहीं है। मुझे यकीन है कि कुछ अस्पष्ट मामले हैं जहां आप संपत्तियों के बजाय iVars घोषित करना चाहते हैं लेकिन मैं किसी के बारे में नहीं सोच सकता।

3 एक्सकोड एक iWar को संपत्ति के समान नाम के साथ बनाएगा, जो पहले _underscore द्वारा किया गया था। यदि आपको (शायद ही कभी) किसी अन्य प्रकार के व्यवहार की ज़रूरत है, तो आप मैन्युअल रूप से @synthesize property = someOtherName कर सकते @synthesize property = someOtherName । @vikingosegundo हमें डायनामिक इवर पर इस आलेख से लिंक करता है, जो @ सिंथेसाइज़ के लिए उपयोग का मामला है। @RobNapier टिप्पणी करता है कि यदि आप किसी संपत्ति के लिए अपने स्वयं के @synthesize iVar = _iVar ( @synthesize iVar = _iVar ) और सेटर्स (पढ़ / लिखने) बना रहे हैं, तो इस मामले में प्रीप्रोसेसर आपके लिए iVar उत्पन्न नहीं करेगा, तो आपको @synthesize iVar = _iVar (विचित्र रूप से) @synthesize iVar = _iVar करने की आवश्यकता है। ।

4 अपने इंटरफ़ेस के साथ सामान्य नियम: जितना संभव हो उतना खाली रखें। यदि आप निजी इस्तेमाल के लिए हैं, तो आपको वास्तव में अपनी विधियों को बिल्कुल घोषित करने की आवश्यकता नहीं है। यदि आप इंटरफ़ेस घोषणा के बिना कोड को काम करने के लिए प्राप्त कर सकते हैं, तो यह तरीका है।

5 यह आपके .m फ़ाइल में एक @interface ब्लॉक है, जो आपके @ कार्यान्वयन के ऊपर रखा गया है:

#TestClass.m

@interface TestClass()

//private property declarations here

@end

@implementation TestClass
...






instance-variables