NSObject 含 retainCount 域。
- 指針賦值(obj2 = obj1)不增加 retainCount。
- retain、copy 增加計數。
- release 減少,歸零時 dealloc 銷毀對象。
- 指針數量 ≠ 引用計數,對象不知有多少指針指向自己。
Engine *e1 = [Engine new]; // rc=1
Engine *e2 = e1; // 指針賦值,rc=1
Engine *e3 = [e1 retain]; // rc=2
[e2 release]; // rc=1
// 輸出驗證:指針賦值不變 rc,retain/release 才改變
關鍵結論:
1. 指針賦值不改變引用計數。
2. retain/copy/release 才修改計數。
3. 計數歸零才真正釋放內存。
4. 釋放後指針值不變(懸空指針),ARC 會自動置 nil。
「落花有意流水無情」:再多指針指向,對象只認引用計數。理解計數與指針分離是精通內存管理的鑰匙。