形式:技術對話錄 | 角色:C# 妹妹 vs Objective-C 阿姨
關鍵特征:回收過程中程序暫停 (Stop-the-world)



retain:引用計數 +1release:引用計數 -1,歸零時調用 dealloc本質:仍是引用計數,只是將 release 延遲到池排空時刻
@implementation House
- (void)dealloc {
NSLog(@"房子被拆除了");
[super dealloc];
}
@end
// 使用自動釋放池
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
House *h = [[[House alloc] init] autorelease]; // 註冊到池
[pool drain]; // 池排空,觸發 h->release -> dealloc
autorelease 將對象加入當前線程的釋放池drain 池release__weak) 解決循環引用問題| 維度 | .NET GC | Obj-C ARC/MRC |
|---|---|---|
| 模型 | 追蹤式 GC | 引用計數 |
| 確定性銷毀 | 無 (非確定性) | 有 (確定性) |
| 循環引用 | 自動處理 | 需弱引用手動斷開 |
| 性能特徵 | 延遲尖峰 (STW) | 平滑分散 |
| 內存開銷 | 較大 (元數據、保守掃描) | 較小 |
| 適用場景 | 托管運行時、大型應用 | 系統級、實時性敏感、iOS/macOS |
記憶體管理沒有銀彈。GC 適合高吞吐、容忍延遲尖峰的服務端;引用計數適合確定性銷毀關鍵、資源受限的客戶端。理解底層機制,才能在性能調優時對症下藥。