ios - Is it better to observe properties or override setters? -
मान लें कि हमारे पास यह हर बार कौन सा समुचित समाधान है और क्यों? मैं जब तक आपको स्पष्ट रूप से जरूरत नहीं है या पक्ष-प्रभाव की आवश्यकता है, कम से कम का पथ प्रतिरोध (या इस मामले में ओवरहेड) सेटर को ओवरराइड करना है। केवीओ में केवल दी गई संपत्ति के लिए बंधन शामिल नहीं है, लेकिन यह धारणा है कि प्रेक्षक बाध्यकारी अवधि के दौरान जीवित रहेगा। मुझे भी शुरू करने के बारे में नहीं पता कि कैसे चुनौतीपूर्ण केवीओ डीबग करने के लिए भी हो सकता है! कुख्यात "ब्रेकपॉइंट ऑन" किसी को डराने के लिए पर्याप्त होगा। "खुद को अवलोकन", जबकि सिद्धांत में एक अच्छा विचार है, ठीक से प्राप्त करने के लिए मुश्किल है सेटर को ओवरराइड करना केवीओ सेटर्स के शीर्ष पर ओवरहेड की एक अतिरिक्त (हालांकि न्यूनतम) राशि है जो केवल अन्य ऑब्जेक्ट्स के लिए बाध्य करने के लिए वास्तव में उपयोगी है। इसके अलावा, यदि आप एक वर्ग को स्व-निहित इकाई के रूप में मानते हैं, तो वास्तव में उसे स्वयं के किसी भी गुण का पालन करने की आवश्यकता नहीं होनी चाहिए। सेटर्स सटीक रूप से विद्यमान हैं, ताकि किसी दिए गए वर्ग अपने गुणों में परिवर्तनों पर प्रतिक्रिया करने का विकल्प चुन सकें, या परिवर्तनों को अस्वीकार या संशोधित कर सके। खुद को देखकर , अब आप केवीओ के नियमों के लिए प्रतिबद्ध हैं: अर्थात् अपने आप को एक पर्यवेक्षक के रूप में हटाने, और कार्यान्वयन हाथ में कार्य से संबंधित, यह रास्ता बहुत अधिक काम है आप ऐसा करने के लिए याद रखना क्यों चाहते हैं? CustomButton इंटरफ़ेस है:
@ इंटरफ़ेस कस्टमबटन: UIButton @property (nonatomic, असाइन करें) CGFloat minWidth; @end
minWidth बदल जाता है, हम फिर से हमारा
CustomButton लेआउट करना चाहते हैं जहां तक मुझे पता है, हमारे पास दो समाधान हैं:
संपत्ति के मान को देखकर
// इन-इनिटविथफ्रेम: [स्वयं addObserver: स्वयं केकेपैथ: @ "मिनेविड्थ" विकल्प: 0 संदर्भ: शून्य]; // इन-प्रेस्व्हरएवल्यूफॉरेपाथ: ऑफ ऑब्जेक्ट: परिवर्तन: प्रसंग: [स्व सेटनेड्स लेआउट];
ओवरराइडिंग
minWidth के सेटर
// इन -सेटमिनविड्थ: _minWidth = minWidth; // साइड नोट: यह एक एआरसी परियोजना है [आत्म सेटनैड्स लेआउट];
1: साइड इफेक्ट बदल सकते हैं
2: परम्परागत बुद्धि
3: हम सभी आलसी
-observeValueForKeyPath: ofObject: change: context:
Comments
Post a Comment