Automatic Reference Counting: การจัดการ memory แบบใหม่ใน XCode 4

จากเดิมที่ Objective-C ใช้ manual reference counting ทำให้ code ดูเลอะเทอะ XCode 4 มาพร้อมกับการจัดการ memory แบบใหม่ ทำให้ลักษณะโปรแกรมที่ได้ style เหมือนกับ ภาษาที่ใช้ Garbage Collector แต่ว่ายังคงเป็น Ref count ! XCode ใช้ keyword ภาษาแบบใหม่ คอยกำกับ object ownership ให้กับ compilter ทำให้การ alloc/dealloc สามารถวิเคราะห์และบันทึกไว้ได้โดย compiler และเมื่อ link โปรแกรมโดยรวม compiler จึงสามารถ inject alloc/dealloc code ตามการใช้งานในแต่ละ flow

แต่เพื่อเป็นการ trade-off กับความสบายนี้ ข้อจำกัด/กำหนด หลายอย่างจึงเกิดขึ้น เพื่อสนับสนุนการทำงานของ compiler เอง อย่างที่เห็นได้ชัดคือ keyword ใหม่ ที่ใช้กับ @property ได้แก่ strong กับ weak

strong = retain, แสดงถึง strong reference

weak = assign, แสดงถึง weak reference

อย่างไรก็ตาม ปัญหา Strong reference cycle ยังคงมีอยู่ (เดาว่า ยังเขียน static analyzer ไม่ได้ขั้นนั้น :D)

ARC ทำให้เกิด code ที่ใช้ memory แบบใหม่ ซึ่งแน่นอนว่า ต้องมีปัญหาเมื่อ interop กับ code เก่า (ข้อห้ามต่างๆ ดูใน dev doc เอา :p) แต่ point ที่น่าสนใจอย่างหนึ่งคือ id ไม่ได้เทียบเท่ากับ (void *) แล้ว