2012-02-09 23 views
6

एमवीसी के मुख्य सिद्धांतों में से एक विचार कभी स्वयं डेटा नहीं होना चाहिए। डब्ल्यूडब्ल्यूडीसी सत्र 116 में इस सिद्धांत को कई बार दोहराया जाता है। लेकिन फिर UIImageView (एक दृश्य) क्यों UIImage (एक मॉडल) है? क्या यह उपर्युक्त सिद्धांत का उल्लंघन नहीं करता है?UIImageView का अपना UIImage क्यों है। क्या यह एमवीसी सिद्धांतों का उल्लंघन करता है?

या क्या मैं यहां कुछ भी गलत समझता हूं? शायद सिर्फ इसलिए कि UIImageView में image संपत्ति का मतलब यह नहीं है कि यह UIImage है?

उत्तर

7

शब्द अक्सर यह इंगित करने के लिए उपयोग किया जाता है कि एक वस्तु ने दूसरे को बनाए रखा है। जाहिर है, एक दृश्य जो एक छवि प्रदर्शित करता है उस छवि को तब तक बनाए रखना चाहिए जब तक इसकी आवश्यकता हो। लेकिन "स्वामित्व" की यह धारणा बहुत सीमित है, और इसका मतलब यह नहीं है कि दृश्य को संग्रहीत करने, बदलने या अन्यथा प्रबंधित करने के लिए जिम्मेदार होना चाहिए।

+0

तो इसका मतलब है कि UIImageView को कभी भी UIImage को कभी नहीं बदलना चाहिए, उस नौकरी को यूआईसींट्रोलर पर छोड़ देना सही है? समझ में आता है, धन्यवाद =) –

+0

लेकिन UIImageView को छवि को बनाए रखने की आवश्यकता क्यों है? यह सिर्फ उस छवि की जरूरत है जब वह खुद को स्क्रीन पर खींच लेता है? –

+2

UIImageView को छवि के संदर्भ की आवश्यकता है क्योंकि इसे स्वयं को फिर से निकालना पड़ सकता है, और डेटा को करने की आवश्यकता है। यदि यह छवि को बरकरार नहीं रखता है, तो छवि को किसी भी समय आसानी से हटाया जा सकता है, और दृश्य को अमान्य सूचक (और शायद क्रैश) के साथ छोड़ा जाएगा। यह उस छवि को तब तक बरकरार रखता है जब तक कि कोई इसे इसके बजाय किसी अन्य छवि का उपयोग करने के लिए कहता है। – Caleb

4

अच्छा सवाल। मेरी राय में, UIImageView UIImage का "स्वामित्व" नहीं है, लेकिन जाहिर है कि इसका संदर्भ होना आवश्यक है। UIImageView छवि को तुरंत चालू नहीं करता है।

एक ही तर्क को UILabel (एक दृश्य) के लिए एक टेक्स्ट प्रॉपर्टी (एक मॉडल) के लिए बनाया जा सकता है।

+0

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

+0

एक शुद्ध एमवीसी मॉडल में, नियंत्रक "स्वयं" होगा और दृश्य और मॉडल दोनों के संदर्भों को संदर्भित करेगा। इस दृश्य में मॉडल का संदर्भ होगा और खुद को प्रदर्शित करने का तरीका जानेंगे। नियंत्रक अभी भी यह देखने के लिए ज़िम्मेदार है कि कौन सा मॉडल उदाहरण उपयोग करना है। – picciano

+0

सहमत हैं। लेकिन दृश्य को अपनी आईवर सूची (या संपत्ति सूची) में एक मॉडल की आवश्यकता नहीं है। इसमें केवल एक विधि हो सकती है जैसे - (शून्य) रेंडर विथमोडेल: (मॉडल *) एम; '- जब मॉडल बदल जाता है तो नियंत्रक द्वारा कॉल किया जाएगा? मैं पूरी तरह से समझता हूं कि UIKit UIImageView को प्रदर्शन कारण के लिए एक छवि प्रॉपर्टी बनाता है (इस तरह की छोटी चीज़ के लिए नियंत्रक की आवश्यकता क्यों है), लेकिन फिर यह मेरे दिमाग में एमवीसी आदर्श का उल्लंघन करता है। –

1

तकनीकी रूप से, UIImageView में कोई छवि नहीं है, यह छवि को प्रति पर संदर्भित करता है ताकि इसे कुशलतापूर्वक प्रस्तुत किया जा सके। UIImage बस अपरिवर्तनीय होता है, इसलिए एक प्रति मूल के समान उदाहरण है।

UILabel समान रूप से व्यवहार करता है, लेकिन स्पष्ट रूप से text संपत्ति को copy के रूप में घोषित करता है।

+0

उत्परिवर्तनीय/अपरिवर्तनीय बिंदु लाने के लिए धन्यवाद :) –