2012-04-07 15 views
8

हाँ, मैं इस देखा:क्या मैं अपने फ्रेम के लिए शून्य UIView लौटने वाले CGRectZero पर भरोसा कर सकता हूं?

विधि एक struct देता है, तो के रूप में मैक ओएस एक्स ABI फ़ंक्शन कॉल गाइड रजिस्टरों में वापस करने से परिभाषित किया गया, तो एक संदेश नहीं के बराबर करने के लिए भेजा में हर क्षेत्र के लिए रिटर्न 0.0 संरचना अन्य संरचना डेटा प्रकार शून्य से भरा नहीं जाएगा।

मुझे बस यह नहीं मिला।

उत्तर

14

यदि आप एलएलवीएम कंपाइलर (एक्सकोड 4.2 या बाद में) के हाल के संस्करणों का उपयोग कर रहे हैं, तो हाँ, मैसेजिंग nil एक स्ट्रक्चर-रिटर्निंग विधि के साथ एक शून्य-भरे संरचना का उत्पादन करेगा। CGRect के मामले में, इसका अर्थ है CGRectZero के बराबर एक रेक्ट।

स्रोत: Greg Parker, जो ओबीजेसी रनटाइम पर ऐप्पल में काम करता है।

+0

प्रश्न में उद्धृत दस्तावेज़ देखें। यह आधिकारिक उद्देश्य-सी प्रोग्रामिंग भाषा से आधिकारिक है। आप देख सकते हैं कि यह पहले से ही बताता है कि लौटाई गई संरचना शून्य-भर जाएगी, लेकिन केवल उन लोगों के लिए "मैक ओएस एक्स एबीआई फंक्शन कॉल गाइड द्वारा रजिस्टरों में वापस आने के लिए परिभाषित किया गया है"। मुझे यकीन नहीं है कि उपरोक्त ट्वीट का अर्थ क्या है। क्या इसका मतलब यह है कि अब कोई भी संरचना शून्य-भरेगी, जिसमें "अन्य संरचना डेटा प्रकार शामिल हैं जो पुराने दिनों में शून्य से भरे नहीं जाएंगे"? – an0

+3

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

+1

उपरोक्त ट्वीट के अलावा, डब्ल्यूडब्ल्यूडीसी 2011 के सत्रों में से एक में भी इसका उल्लेख किया गया था। –

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