สมมติว่าฉันมีอ็อบเจ็กต์ชื่อ MyClass ซึ่งมีคุณสมบัติที่กำหนดเป็น @property (nonatomic, retain) NSString *foo;
และฉันสังเคราะห์คุณสมบัตินั้น
จากนั้นในคลาสอื่น สมมติว่าตัวแทนแอปพลิเคชันฉันกำหนดสตริง (แต่อาจเป็นอะไรก็ได้) NSString *myString = [[NSString alloc] initWithString:@"Hi"];
และเรียกใช้อินสแตนซ์ของ MyClass: [myClass setFoo:myString];
เกิดอะไรขึ้นจริงๆ? การอ้างอิงไปยังพื้นที่ที่ได้รับการจัดสรรสำหรับ myString
ได้รับการตั้งค่าหรือไม่ หรือได้รับสิ่งที่อยู่ในหน่วยความจำที่จัดสรรสำหรับ myString
และตั้งค่าเป็นหน่วยความจำที่จัดสรรสำหรับ foo
เนื่องจากฉันเรียก retain
บน foo
และฉันต้องปล่อย myString
ในตัวแทนแอปพลิเคชัน และฉันต้องปล่อย foo
ใน MyClass เนื่องจากมันถูกเก็บไว้ แต่ฉันจะต้องปล่อยอีกครั้งหรือไม่เนื่องจากมีการกำหนดตัวแปร alloc'd อื่นให้กับมัน