1. 程式人生 > >第30條:以ARC簡化引用計數

第30條:以ARC簡化引用計數

內存管理 管理 對象 ini 意思 orm nal str 靜態

  本條要點:(作者總結)

  引用計數這個概念相當容易理解。需要執行保留與釋放操作的地方也很容易就能看出來。所以 Clang 編譯器項目帶有一個 “靜態分析器”(static analyzer)。用於指明程序裏引用計數出問題的地方。舉個例子,假設下面這段代碼采用手工方式管理引用計數:

1    if ([self shouldLogMessage]) {
2 
3     NSString *message = [[NSString alloc] initWithFormat:@"I am object, %p", self];
4 
5     NSLog(@"Message = %@
", message); 6 7     } 

  此代碼有內存泄漏問題,因為 if 語句塊末尾並未釋放 message 對象。由於在 if 語句之外無法引用 message,所以此對象所占的內存泄漏了(這裏“泄漏”的意思是:沒有正確釋放已經不再使用的內存)。判定內存是否泄漏所用的規則很簡明:調用NSString 的 alloc 方法所返回的那個 message 對象的保留計數比期望值要多 1。然而卻沒有與之對應的釋放操作來抵消。因為這些規則很容易表述,所以計算機可以簡單地將其套用在程序上,從而分析出有內存泄漏問題的對象。這正是 “靜態分析器” 要做的事。

  靜態分析器還有更為深入的用途。既然可以查明內存管理問題,那麽應該也可以根據

 

第30條:以ARC簡化引用計數