हर कोई आप बदल नहीं सकते/एक अपरिवर्तनीय वस्तु को संशोधित कहते हैं। मेरे पास व्याख्या करने का एक अलग तरीका है। आप इसे संशोधित कर सकते हैं, लेकिन फिर आप नई ऑब्जेक्ट पर नया पॉइंटर बनायेंगे, ऐसा नहीं है कि आपने पुरानी ऑब्जेक्ट को संशोधित किया है, यह एक ब्रांड है। नया। वस्तु। कोई भी पॉइंटर जिस पर पहले पॉइंटिंग पॉइंटर था, उसका परिवर्तन नहीं दिखाई देगा। हालांकि अगर यह एक म्यूटेबल ऑब्जेक्ट है, तो इससे पहले की ओर इशारा करते हुए ऑब्जेक्ट नया मान देखेगा। उदाहरण देखें। FYI %p
ढेर में सूचक स्थान मुद्रित करता है।
NSString * A = @"Bob";
NSString * B = @"Bob";
NSString * C = @"Bob1";
NSString * D = A;
NSLog(@"\n %p for A \n %p for B \n %p for C \n %p for D",A,B,C,D);
// memory location of A,B,D are same.
एक
सी
0x104129068 के लिए बी
0x104129088 के लिए 0x104129068 के लिए D के लिए 0x104129068
सूचक एक की वस्तु को संशोधित
A = @"Bob2"; // this would create a new memory location for A, its previous memory location is still retained by B
NSLog(@"\n%p for A \n%p for B \n%p for C \n %p for D",A,B,C, D);
// A has a **new** memory location, B,D have same memory location.
एक
सी
0x104129068 के लिए बी
0x104129088 के लिए 0x104129068 के लिए D
// NSMutableString * AA = @"Bob"; <-- you CAN'T do this you will get error: Incompatible pointer types initializing NSMutableString with an Expression of type NSString
NSMutableString * AA = [NSMutableString stringWithString:@"Bob1"];
NSString * BB = @"Bob";
NSString * CC = @"Bob1";
NSString * DD = AA;
NSLog(@"\n %p for AA \n %p for BB \n %p for CC \n %p for DD",AA,BB,CC,DD);
// memory location of AA,DD are same.
0x7ff26af14490 के लिए ए.ए.
0x104129068 के लिए बी बीके लिए 0x1041290c 0x104129088 सीसी के लिए
सीसी
के लिए बी बी
0x104129088 के लिए ए.ए.
0x104129068 के लिए डीडी
संशोधित करना सूचक एए के वस्तु
AA = (NSMutableString*)@"Bob3"; // This would NOT create a new memory location for A since its Mutable-- D was and still pointing to some location
NSLog(@"\n%p for AA \n%p for BB \n%p for CC \n %p for D",AA,BB,CC,DD);
// memory location of AA,DD are NOT same.
0x104129128 के लिए 0x7ff26af0x7ff26af14490 डीडी
आप कल्पना कर सकते हैं के रूप में के लिए, सभी NSString प्रॉपर्टी की डिफ़ॉल्ट भंडारण विशेषता retain
है। copy
& retain
पर अधिक जानकारी के लिए मैं अत्यधिक सुझाव देता हूं कि आप इस प्रश्न को पढ़ लें। NSString property: copy or retain?
एक अच्छा अनुवर्ती प्रश्न * क्यों * एनएसएआरएआरई, एनएसएसटींग, एनएसएसएटी, एनएस डिक्शन इत्यादि * * अपरिवर्तनीय हैं। –