第30條:以ARC簡化引用計數
阿新 • • 發佈:2017-08-07
內存管理 管理 對象 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簡化引用計數