about bank

วันอังคาร, ธันวาคม 21, 2547

พื้นฐาน 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]



<< หน้าแรก