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

Popular posts from this blog

excel vba - How to delete Solver(SOLVER.XLAM) code -

c# - Add Image in a stackpanel based on textbox input -

java - Reaching JTextField in a DocumentListener -