2011-05-24 9 views
10

महत्वपूर्ण साथ KVO है: सभी वर्गों सभी गुण के लिए KVO संगत होने चाहिए। आप सुनिश्चित कर सकते हैं अपने खुद के वर्गों चरणों में वर्णित का पालन करते हुए KVO संगत होने चाहिए "KVO अनुपालन।" आमतौर में एप्पल की आपूर्ति चौखटे गुण केवल KVO अनुरूप अगर वे जैसे प्रलेखित रहे हैं।कैसे विश्वसनीय UIKit

यह कथन मुझे उलझन में छोड़ देता है। क्या हम UIKit ऑब्जेक्ट्स के लिए केवीओ का उपयोग नहीं कर सकते? मुझे किसी भी संपत्ति को केवीओ अनुपालन के रूप में दस्तावेज करने को याद नहीं है। अन्यथा कहने के बावजूद, मैं कई गुणों के साथ केवीओ का उपयोग करने में सक्षम हूं। क्या इसका मतलब यह है कि मैं इस पर भरोसा नहीं कर सकता?

इसमें कोई अंतर्दृष्टि की सराहना की जाएगी।

उत्तर

9

UIKit ज्यादातर केवीओ अनुपालन नहीं है। यह ज्यादातर इसलिए है क्योंकि UIViewCALayer के लिए उच्च स्तरीय रैपर के रूप में कार्य करता है, इसलिए जब आप उदा। frameUIView की संपत्ति को बदलें, यह frame परतों को बदल देगा लेकिन उदाहरण छोड़ दें। boundsUIView की संपत्ति छेड़छाड़ की गई है, इसलिए view.bounds पथ के लिए कोई पर्यवेक्षक ट्रिगर नहीं किया जाएगा, क्योंकि यह वास्तव में कभी भी परिवर्तन नहीं करता है। और इससे गैर केवीओ अनुपालन होता है।

केवल अगर संपत्ति केवीओ अनुपालन के रूप में चिह्नित है तो क्या आप इस पर भरोसा कर सकते हैं, अन्यथा यह कुछ अजीब मामलों में काम नहीं करेगा या तोड़ नहीं देगा।

+0

UIView का फ्रेम एक मूल्य के रूप में स्वयं संग्रहित नहीं है। UIView सीमाओं और केंद्र बिंदु स्टोर करता है। यदि "फ्रेम" के लिए पूछा जाता है तो UIView फ्रेम को सीमाओं और केंद्र बिंदु मानों से गणना करता है। – MacMark

+0

मैं दिए गए तर्क को पूरी तरह से समझता हूं लेकिन फिर भी UIView फ्रेम ठीक से केवीओ अनुपालन करता है और ** ** वास्तव में ** मुझे भ्रमित करता है। – Till

+0

@ मिश तक, शायद ऐप्पल ने नए आईओएस संस्करणों में कार्यान्वयन विवरण बदल दिया है? मुझे नहीं पता, जहां तक ​​मुझे याद है कि जब मैं उस उत्तर को लिख रहा था तब यह काम नहीं करता था। – JustSid

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