मैं अपने AppDelegate में एक समान कोड है:
@interface AppDelegate () {} @property (nonatomic, आवंटित) UILocalNotification * mSavedLocalNotification; @property (nonatomic, आवंटित) UILocalNotification * tmpNotification1; @ प्रॉपर्टी (नॉनैटोमिक, कॉपी) यूआईएलोकल नोटिफिकेशन * टीएमपी नोटिफिकेशन 2; @end @implementation AppDelegate @synthesize mSavedLocalNotification = mSavedLocalNotification; @ संश्लेषण tmpNotification1 = tmpNotification1; @ संश्लेषण tmpNotification2 = tmpNotification2; - (bool) आवेदन: (UIApplication *) आवेदन didFinishLaunchingWithOptions __unused: (NSDictionary *) launchOptions {UILocalNotification * सूचना = [launchOptions objectForKey: UIApplicationLaunchOptionsLocalNotificationKey]; यदि (अधिसूचना) {mSavedLocalNotification = [अधिसूचना प्रतिलिपि]; TmpNotification1 = सूचना; TmpNotification2 = सूचना; NSLog (@ "##########% p% p% P% p" mSavedLocalNotification, अधिसूचना, tmpNotification1, tmpNotification2); }}
ट्यूटोरियल को पढ़कर मुझे जो समझ में आया, एक प्रॉपर्टी में कॉपी विशेषता को एक ही काम करना चाहिए जो कॉपी विधि को बुला लेता है।
तो यह क्यों करता है प्रोग्राम प्रिंट: 0x15d39270 0x15dcc0d0 0x15dcc0d0 0x15dcc0d0?
कॉपी विशेषता वाले tmpNotification2 = अधिसूचना
संपत्ति क्यों है, बस क्लोनिंग के बजाय एक ही सूचक रखें यह, जबकि mSavedLocalNotification = [अधिसूचना कॉपी]
; वास्तव में एक नया बनाता है।
"कॉपी" विधि अपरिवर्तनीय वस्तुओं की प्रतिलिपि नहीं करती है। चूंकि वे अपरिवर्तनीय हैं और बदला नहीं जा सकता, इसलिए प्रतिलिपि बनाने में कोई मतलब नहीं है।
लेकिन इससे भी बदतर, आप स्पष्ट रूप से उदाहरण चर का उपयोग कर रहे हैं आप कोडिंग सम्मेलन की अनदेखी करते हुए लग रहे हैं कि उदाहरण चर को एक अंडरस्कोर वर्ण से शुरू करना चाहिए; आप वास्तव में सक्रिय रूप से इसे circumventing रहे हैं इसलिए सदस्य चर तक पहुंचने में आपकी गलती स्पष्ट नहीं है।
Comments
Post a Comment