พื้นฐาน memory management ใน Objective-c
memory management บน Objective-c ไม่เหมือนกับบน C หรือ C++
Obj-C จะใช้วิธีจำจำนวน pointer ที่ชี้มันไว้ ถ้า pointer เป็น 0 เมื่อไหร ตัว autorelase ก็จะทำการลบมันทั้งครับ สำหรับคำสั่งที่ใช้ในการจัดการ memory ก็มีหลายคำสั่ง เช่น alloc retain release เป็นต้น
เท่าที่คุยกับ rp สรุปได้ว่าว่า
NSString *x = [NSString alloc];
หลักจาก alloc แล้ว ก็เหมือนมีโซ่ผูกคอหมาหนึ่งเส้น
[x retain]
พอสั่ง retain ก็เหมือนมีโซ่อีกเส้นนึงมาผูกคอหมาไว
NSString *y = x;
พอสั่งให้มีตัวแปลเข้ามาชี้ มันแบ่งโซ่ให้กับ y
[y release]
ถ้าสั่ง release ก้เหมือนปลอยโซ่ออกจามือ
[x retain];
[x release];
NSLog(@"dog here %@",x);
ถ้าเรียกมีโซ่อยู๋หลายอัน จะ release ไปสักอันมันก็ยังมีโซ่อยู่ในมือหมาไม่หายไปไหน
จริงๆ มันก็ไม่ได้มีโซ่ หรือแบ่งโซ่อะไรหรอก แค่มันมีตัวเลขเก็บจำนวนโซ่แค่นั้นเอง (ยังเป็นโซ่อยู่ดี) ถ้าไม่เหลือโซ่แล้วตัวแปลของเราก็จะหายไปโดยอัตโนมัติ
* ยังไม่แน่ใจว่าเฉพาะกับ object หรือเปล่า ขอไปลองก่อนนะ
* จะหายไปก็ต้องมีการทำ autorelease ด้วยนะ

0 ความคิดเห็น:
แสดงความคิดเห็น
สมัครสมาชิก ส่งความคิดเห็น [Atom]
<< หน้าแรก