1. 程式人生 > >iOS/OS X 記憶體管理(二):藉助工具解決記憶體問題

iOS/OS X 記憶體管理(二):藉助工具解決記憶體問題

這篇我們主要關注在實際開發中會遇到哪些記憶體管理問題,以及如何使用工具來除錯和解決。

166109-00c90f0f030c3665.png

在往下看之前請下載例項MemoryProblems,我們將以這個工程展開如何檢查和解決記憶體問題。

懸掛指標問題

懸掛指標(Dangling Pointer)就是當指標指向的物件已經釋放或回收後,但沒有對指標做任何修改(一般來說,將它指向空指標),而是仍然指向原來已經回收的地址。如果指標指向的物件已經釋放,但仍然使用,那麼就會導致程式crash。

當你執行MemoryProblems後,點選懸掛指標那個選項,就會出現EXC_BAD_ACCESS崩潰資訊。

166109-14751cda6424d749.png

我們看看這個NameListViewController是做什麼的?它繼承UITableViewController,主要顯示多個名字的資訊。它的實現檔案如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 static NSString *const kNameCellIdentifier = @
"NameCell"; @interface NameListViewController () #pragma mark - Model @property (strong, nonatomic) NSArray *nameList; #pragma mark - Data source @property (assign, nonatomic) ArrayDataSource *dataSource; @end @implementation NameListViewController - (void)viewDidLoad {
[super viewDidLoad]; self.tableView.dataSource = self.dataSource; } #pragma mark - Lazy initialization - (NSArray *)nameList { if (!_nameList) { _nameList = @[@"Sam", @"Mike", @"John", @"Paul", @"Jason"]; } return