首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Objective-C 內存管理核心:引用計數機制、retain/release/autorelease 實戰圖解與常見誤區

     編輯:關於C語言

蘋果官方三條準則

  1. new/alloc/copy 創建 → retainCount=1,不用時 release/autorelease。
  2. 其他方法獲取 → 假設 retainCount=1 且已 autorelease,需長期持有則 retain。
  3. retain 與 release/autorelease 次數必須配對。

引用計數模型

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。

總結

「落花有意流水無情」:再多指針指向,對象只認引用計數。理解計數與指針分離是精通內存管理的鑰匙。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved