2012-09-25 10 views
5

कोको में, जब हम एक दृश्य को फिर से तैयार करना चाहते हैं, तो हम दृश्य को setNeedsDisplay: संदेश भेज देंगे जो दृश्य को YES के पैरामीटर के साथ खुद को फिर से चलाने के लिए कह रहा है। मैं सोच रहा था कि क्या ऐसी परिस्थितियां हैं जहां आप setNeedsDisplay:NO, जैसे मल्टीथ्रेडिंग वातावरण, और setNeedsDisplay:YES पर एक दृश्य भेजना चाहते हैं, तो setNeedsDisplay:NO के साथ तुरंत इसे फिर से सेट करना दृश्य को फिर से तैयार कर देगा। अगर setNeedsDisplay:NO पर कॉल करने के कोई कारण नहीं हैं, तो इस तरह की एक कठिन विधि क्यों बनाएं, जहां वे [view redrawView]सेट नेड्स डिस्प्ले: कोई भी उपयोग नहीं है?

उत्तर

1

setNeedsDisplay:NO यदि आप पहले setNeedsDisplay:YES नामक त्यागना चाहते हैं तो इसका उपयोग किया जा सकता है। जैसे कभी-कभी सभी सबव्यूज़ को डिस्प्ले की आवश्यकता के रूप में चिह्नित करना आसान होता है और फिर उनमें से कुछ को अनमार्क करने के लिए एल्गोरिदम चलाया जाता है।

-2

जैसे कुछ को लागू कर सकते हैं जैसा कि आप शायद जानते हैं, सामान्य घटना के माध्यम से प्रत्येक पास प्रत्येक पर प्रदर्शन अपडेट स्वचालित (यदि आवश्यक हो) पाश। यदि आवश्यक हो तो डिस्प्ले अपडेट को मजबूर करने के लिए आप setNeedsDisplay: पर कॉल करें।

NSView के प्रलेखन से:

चर्चा
जब भी डेटा या राज्य के लिए एक दृश्य वस्तु परिवर्तन ड्राइंग के लिए इस्तेमाल किया, दृश्य एक setNeedsDisplay भेजा जाना चाहिए: संदेश। प्रदर्शन की आवश्यकता के रूप में चिह्नित NSView ऑब्जेक्ट्स को एप्लिकेशन के इवेंट लूप के माध्यम से प्रत्येक पास प्रत्येक बार स्वचालित रूप से फिर से चलाया जाता है। (वस्तुओं देखें पुन: प्रदर्शित करने की आवश्यकता है कि इससे पहले कि घटना पाश के आसपास आता है निश्चित रूप से तुरंत उचित प्रदर्शन भेजा जा सकता है ... विधि।)

इस समारोह के लिए बूलियन पैरामीटर बस को निर्दिष्ट करती है पूरे सीमा की प्रश्न में दृश्य प्रभावित होता है या नहीं, अगर कुछ संपत्ति "जरूरतों को प्रदर्शित करने" को सही या गलत पर सेट किया गया है। इस प्रकार, setNeedsDisplay: वास्तव में अतिरिक्त पैरामीटर के साथ "redrawView" की तरह बहुत अधिक काम करता है।

संपादित

ऊपर एक ही दस्तावेज़ से प्रेरित था:

झंडा
हाँ, तो प्रदर्शन की आवश्यकता होगी, के रूप में रिसीवर के पूरे सीमा के निशान; यदि नहीं, तो इसे प्रदर्शित करने की आवश्यकता के रूप में चिह्नित नहीं है।

+3

यह काफी हद तक गलत है। इवेंट लूप जांचता है कि 'सेटडिड्स डिस्प्ले' द्वारा निर्धारित अनुसार दृश्य को फिर से खींचा जाना चाहिए, जिसे कहा जाता है (यह वास्तव में ध्वज सेट करता है: '- [NSView ज़रूरतें डिस्प्ले] ')। वह विधि पूरी तरह से तत्काल पुनरावृत्ति का कारण नहीं बनती है, न ही हर दृश्य पर प्रत्येक दृश्य को फिर से खींचा जाता है। आपके द्वारा जबरन मजबूर ड्राइंग व्यवहार '- [NSView डिस्प्ले]' और '- [NSView displayRect:]' द्वारा प्रदान किया गया है। Http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaViewsGuide/Optimizing/Optimizing.html#//apple_ref/doc/uid/TP40002978-CH11-112409 –

+0

पर्याप्त मेला देखें। मैंने अपना जवाब संपादित किया और समझाया कि जानकारी कहां से आती है। – Mundi

+1

@ मुंडी दुर्भाग्य से यह मेरे प्रश्न का बिल्कुल जवाब नहीं देता है। मैं पूछ रहा हूं कि 'setNeedsDisplay: NO' के लिए कोई उपयोग है या नहीं। – TheAmateurProgrammer

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