iOS/OS X 記憶體管理(二):藉助工具解決記憶體問題
阿新 • • 發佈:2019-02-04
這篇我們主要關注在實際開發中會遇到哪些記憶體管理問題,以及如何使用工具來除錯和解決。
在往下看之前請下載例項MemoryProblems,我們將以這個工程展開如何檢查和解決記憶體問題。
懸掛指標問題
懸掛指標(Dangling Pointer)就是當指標指向的物件已經釋放或回收後,但沒有對指標做任何修改(一般來說,將它指向空指標),而是仍然指向原來已經回收的地址。如果指標指向的物件已經釋放,但仍然使用,那麼就會導致程式crash。
當你執行MemoryProblems後,點選懸掛指標那個選項,就會出現EXC_BAD_ACCESS崩潰資訊。
我們看看這個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
|