2010-07-16 11 views
9

मैंने सोचा था कि घर का पका @property setters इस तरह दिखना चाहिए थे:क्या आपको WillChangeValueForKey को कॉल करने की आवश्यकता है: और didChangeValueForKey :?

-(void) setFoo:(Foo *)newFoo { 

    // Safeguards 
    // ... 

    [self willChangeValueForKey:@"foo"]; 
    // Switcheroo 
    // ... 
    [self didChangeValueForKey:@"foo"]; 
} 

लेकिन मैं लोग हैं, जो कोको एक बहुत लंबे समय तक कर रहा हूँ की तुलना में मेरे पास है, जहां से ब्लॉग पोस्ट में कोड का एक बहुत कुछ देखना यह इस तरह है:

-(void) setFoo(Foo *)newFoo { 

    // Safeguards 
    // ... 

    // Switcheroo 
    // ... 
} 

तो मेरा सवाल है, क्या हमें केवीओ-अधिसूचना विधियों को कॉल करने की आवश्यकता है? या यदि आप निजी रनटाइम का उपयोग कर रहे हैं, तो क्या आप निजी आईवर अपडेट करते समय जादुई तरीके से किया जा रहा है?

उत्तर

13

जब तक आप ऑप्ट आउट नहीं करते हैं तब तक यह जादुई रूप से किया जाता है। केवीओ गाइड के this section पढ़ें। ध्यान दें कि केवीसी/केवीओ प्राचीन समय से अस्तित्व में था (यानि @property की शुरूआत से पहले) तो इससे कोई फर्क नहीं पड़ता कि सेटर @synthesize डी है या नहीं। यह पुराने/नए रनटाइम डिचोटोमी से भी संबंधित नहीं है।

इस जादू (आईएसए-स्विजलिंग) का विवरण माइक ऐश द्वारा blog post में विस्तृत किया गया था। यह जादू है। असल में, जब कोई कुंजी देखी जाती है, तो रनटाइम स्वचालित रूप से सेटटर के कार्यान्वयन को प्रतिस्थापित करता है ताकि वह केवीओ अधिसूचना को कॉल कर सके।

+0

केवीओ गाइड लिंक टूटा हुआ है (( – voromax

+0

@ voromax लिंक फिक्स्ड – herzbube

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

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