खोज…


वाक्य - विन्यास

  • typedef संरचना { typeA propertyA ; टाइपबी प्रॉपर्टी बी ; ...} स्ट्रक्चरनाम

टिप्पणियों

ऑब्जेक्टिव सी में, आपको लगभग हमेशा एक संरचना के बजाय एक वस्तु का उपयोग करना चाहिए। हालांकि, अभी भी ऐसे मामले हैं जहां एक संरचना का उपयोग करना बेहतर है, जैसे:

  • जब आप (संरचना) प्रकार के बहुत सारे मानों को बनाने और नष्ट करने जा रहे हैं, तो आपको अच्छे प्रदर्शन और छोटे मेमोरी उपयोग की आवश्यकता होती है
  • संरचनाएं बनाने और उपयोग करने के लिए तेज़ होती हैं क्योंकि किसी ऑब्जेक्ट पर किसी विधि को कॉल करते समय, विधि को रनटाइम पर निर्धारित करना पड़ता है
  • Structs कम आकार तक का समय लग क्योंकि वस्तुओं एक अतिरिक्त संपत्ति है isa , जो अपने वर्ग रखती है
  • जब मान में केवल कुछ गुण होते हैं और एक छोटा कुल आकार होता है ( CGSize लेते हैं; इसमें 2 फ़्लोट्स होते हैं, जो प्रत्येक 4 बाइट्स होते हैं, इसलिए यह 8 बाइट्स ले सकता है), और इसका बहुत उपयोग होने वाला है (साथ में संबंध) पहला बिंदु)
  • जब आप यूनियनों या बिटफील्ड का उपयोग कर सकते हैं, और महत्वपूर्ण रूप से, उनके द्वारा सहेजे गए आकार की आवश्यकता होती है क्योंकि आपको छोटे मेमोरी उपयोग (पहले बिंदु के साथ संबंध) की आवश्यकता होती है
  • जब आप वास्तव में संरचना के अंदर एक सरणी स्टोर करना चाहते हैं, क्योंकि ऑब्जेक्टिव-सी ऑब्जेक्ट सीधे सी-एरेज को स्टोर नहीं कर सकते हैं। हालाँकि, ध्यान दें कि आप अभी भी "इनडायरेक्टली" एक ऑब्जेक्टिव-सी ऑब्जेक्ट में एक सरणी प्राप्त कर सकते हैं इसे एक संदर्भ (यानी type * C- एरे type[] स्थान पर type[]
  • जब आपको किसी अन्य कोड के साथ संवाद करने की आवश्यकता होती है, जैसे कि एक पुस्तकालय, जो कि सी में कोडित है; सी में संरचनाएं पूरी तरह से लागू होती हैं, लेकिन ऑब्जेक्ट नहीं होते हैं

CGPoint

एक संरचना का वास्तव में अच्छा उदाहरण CGPoint ; यह एक साधारण मूल्य है जो 2-आयामी बिंदु का प्रतिनिधित्व करता है। इसके 2 गुण हैं, x और y , और इसे लिखा जा सकता है

typedef struct {
    CGFloat x;
    CGFloat y;
} CGPoint;

यदि आपने पहले मैक या आईओएस ऐप डेवलपमेंट के लिए ऑब्जेक्टिव-सी का उपयोग किया है, तो आप लगभग निश्चित रूप से CGPoint आ सकते हैं; CGPoint ने स्क्रीन पर मौजूद वस्तुओं और नियंत्रणों से लेकर एक गेम में ऑब्जेक्ट्स और ग्रेडिएंट में बदलाव तक बहुत कुछ की स्थिति को पकड़ रखा है। इसका मतलब है कि CGPoint बहुत उपयोग किया जाता है। यह वास्तव में प्रदर्शन-भारी गेम के साथ और भी अधिक सच है; इन खेलों में बहुत सी वस्तुएं होती हैं, और इन सभी वस्तुओं को स्थिति की आवश्यकता होती है। ये स्थिति अक्सर या तो CGPoint , या किसी अन्य प्रकार की संरचना जो एक बिंदु को व्यक्त करती है (जैसे कि 3 डी के लिए 3-आयामी बिंदु)।


CGPoint जैसे बिंदुओं को वस्तुओं की तरह आसानी से दर्शाया जा सकता है

@interface CGPoint {
    CGFloat x;
    CGFloat y;
}

... //Point-related methods (e.g. add, isEqualToPoint, etc.)

@property(nonatomic, assign)CGFloat x;
@property(nonatomic, assign)CGFloat y;

@end

@implementation CGPoint

@synthesize x, y;

...

@end

हालाँकि, यदि CGPoint का उपयोग इस प्रकार किया जाता है, तो अंक बनाने और हेरफेर करने में बहुत अधिक समय लगेगा। छोटे, तेज कार्यक्रमों में यह वास्तव में अंतर पैदा नहीं करेगा, और उन मामलों में ऑब्जेक्ट पॉइंट का उपयोग करना ठीक होगा या शायद बेहतर भी होगा। लेकिन बड़े कार्यक्रमों में जहां बिंदुओं का बहुत अधिक उपयोग किया जाता है, अंक के रूप में वस्तुओं का उपयोग करना वास्तव में प्रदर्शन को नुकसान पहुंचा सकता है, जिससे कार्यक्रम धीमा हो सकता है, और स्मृति को भी बर्बाद कर सकता है, जो कार्यक्रम को क्रैश करने के लिए मजबूर कर सकता है।

एक संरचना को परिभाषित करना और संरचना सदस्यों तक पहुंचना

संरचना विवरण का प्रारूप यह है:

struct [structure tag]
{
   member definition;
   member definition;
   ...
   member definition;
} [one or more structure variables]; 

उदाहरण: थ्रीफ्लोट्स संरचना की घोषणा करें:

   typedef struct {
    float x, y, z;
} ThreeFloats;

@interface MyClass
- (void)setThreeFloats:(ThreeFloats)threeFloats;
- (ThreeFloats)threeFloats;
@end

संदेश मान MyClass का एक उदाहरण भेजनामाफ़रेजी: पैरामीटर @ "threeFloats" के साथ MyClass विधि को तीनFloats में लाया जाएगा और एक NSValue में लिपटे परिणाम को वापस करेगा।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow