19

मुझे उत्सुकता है कि क्यों CGRectMake और CGPointMake जैसे कार्य मौजूद हैं और व्यापक रूप से उपयोग किए जाते हैं। जब, बजाय, आप कर सकते हैं:CGRectMake जैसे फ़ंक्शंस का उपयोग क्यों करें?

(CGRect){{x, y}, {width, height}} 

निश्चित रूप से यह और अधिक कुशल है (हालांकि मैं बहुत से नहीं अनुमान लगा रहा हूँ) है के रूप में कोई समारोह कॉल?

(CGRect){origin, size} 

और एक मिश्रण के रूप:

(CGRect){origin, {width, height}} 

इस का उपयोग नहीं है, और मेक कार्यों को प्राथमिकता का क्या कारण है

इसके अलावा, आप मूल और आकार की तरह सेट कर सकते हैं?

उत्तर

8

मैं इसे के बीच वही पुरानी अंतर नहीं है लगता है:

  1. डेटा संरचना के आंतरिक परिभाषा से आप कोड में एक निर्भरता को जोड़ने;

  2. एक समारोह है कि ज्ञान और है कि कर सकता है "मुखौटा" अंतर्निहित डेटा संरचना में कोई परिवर्तन समाहित का उपयोग कर

सिद्धांत रूप में, CGRect के साथ एक पूर्ण विकसित वर्ग में विकसित हो सकता है अपने origin, size, आदि, accessors, आदि ... मैं नहीं कह रहा हूँ यह या समझदार होगा यह संभावना है कि, केवल कारण यह है कि डेटा संरचना के उदाहरण बनाने के लिए आप फ़ंक्शन का उपयोग क्यों करते हैं, परिवर्तनों के लिए आपके कोड की लचीलापन के साथ करना है।

13

यह वास्तव में अधिक कुशल नहीं है। CGRectMake समारोह (और अन्य) static inline, जो संकलक नकल का मतलब है के रूप में घोषित किया गया है सीधे हर जगह यह प्रयोग किया जाता है में समारोह कोड चिपकाता है:

CG_INLINE CGRect 
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height) 

जहां

# define CG_INLINE static inline 

आप

// code 
CGRect myRect = CGRectMake(1,2,3,4); 
// code 
से जाना

से

// code 
CGRect myRect; 
myRect.origin.x = 1; myRect.origin.y = 2; 
myRect.size.width = 3; myRect.size.height = 4; 

जो सिद्धांत रूप में

CGRect myRect = (CGRect){1,2,3,4}; 

से अलग नहीं संकलक अनुकूलन और इस तरह के बाद है।

के रूप में कहा ऊपर आप के रूप में एक समारोह में यह करने के लिए अधिक की गारंटी है कि का उपयोग कर के लिए विरोध CGRect पर निर्भरता को जोड़ने के एक निश्चित तरीके से गठबंधन 4 नंबर की एक struct जा रहा है।

6

सी 99 का कंपाउंड शाब्दिक वाक्यविन्यास कुछ हद तक अस्पष्ट सुविधा है। कुछ लोग मेक फ़ंक्शन को पढ़ने के लिए स्पष्ट पाते हैं, या वे इसे अधिक परिचित पाते हैं। टूलचेन समर्थन में इस चरण में, यह केवल वरीयता है।

मैं उत्सुक क्यों CGRectMake और CGPointMake जैसे कार्यों मौजूद हूँ ...

CGRectMake (10,0 के बाद से उपलब्ध है) से पहले परिसर शाब्दिक के ओएस एक्स के संकलक का समर्थन करते हैं। कंपाउंड अक्षर आधिकारिक तौर पर जीसीसी 3.1 (मई 2002) में पूरा किए गए थे।

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