效能最佳化–尋找和解決殭屍對象

來源:互聯網
上載者:User

記憶體流失是當一個對象或變數在使用完成後沒有釋放掉,那麼如果我們走了另外一個極端情況會什麼樣呢?這就導致過渡釋放(over release)問題,從而使對象“殭屍化”,對象稱為殭屍(zombies)對象。一個對象已經被釋放過了,或者調用者沒有這個對象的所有權而釋放它, 都會造成過渡釋放,產生殭屍對象。

殭屍對象或許對很多人聽起來很恐怖、也很陌生,如果要說起EXEC_BAD_ACCESS異常,可能大家並不陌生。試圖調用殭屍對象方法應用會崩潰(應用直接跳出),並拋出異常EXEC_BAD_ACCESS。

我們看看代碼ViewController的程式碼片段:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{NSUInteger row = [indexPath row];NSDictionary *rowDict = [self.listTeams objectAtIndex:row];NSString *rowValue  =  [rowDict objectForKey:@"name"];NSString *message = [[NSString alloc] initWithFormat:@”您選擇了%@隊。”, rowValue];UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@”請選擇球隊”message:messagedelegate:selfcancelButtonTitle:@”Ok”otherButtonTitles:nil];    [alert release];                                                                                                                                          ①[message release];    [alert show];                                                                                                                                             ②[tableView deselectRowAtIndexPath:indexPath animated:YES];}

 

 

注意看程式碼的黑體部分,你會發現什麼問題嗎?程式啟動並執行結果拋出EXEC_BAD_ACCESS異常。假設我們現在無法找到問題,可以使用 Instruments工具的Zombies跟蹤模板。其中Instruments選擇Zombies模板,點擊Profile按鈕就可以進入了。

點擊Allocations的“i”按鈕,彈出Target菜單配置Zombies模板,在Launch Configuration中勾選Record reference counts和Enable NSZombie detection。其中Record reference counts是顯示引用計數,Enable NSZombie detection是能夠檢測殭屍對象。

這樣在程式啟動並執行時候,如果發現殭屍對象它就會彈出一個對話方塊,點擊其中“→”按鈕,在螢幕的下方會顯示殭屍對象的詳細資料。

 

殭屍對象為UIAlertView類型,從上到下殭屍對象是引用計數的變化是:建立 → 釋放 → 殭屍化。開啟擴充詳細視圖,在右邊的跟蹤堆棧資訊進入我們程式碼,會開啟對應代碼,定位殭屍對象。

 

在上面的3條高亮顯示的代碼會影響對象引用計數,從中我們不難發現問題。關於解決方案就本例而言需要將代碼②行的顯示警告框的[alert show]語句,放在[alert release]語句之前調用就可以了。這就是殭屍對象問題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.