你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> IPhone開發工具篇

IPhone開發工具篇

編輯:關於IOS

內存洩漏問題的解決

  內存洩漏(Memory Leaks)是當一個對象或變量在使用完成後沒有釋放掉,這個對象一直占有著這塊內存,直到應用停止。如果這種對象過多內存就會耗盡,其它的應用就無法運行。這個問題在C++、C和Objective-C的MRR中是比較普遍的問題。   在Objective-C中釋放對象的內存是發送release和autorelease消息,它們都是可以將引用計數減1,當為引用計數為0時候,release消息會使對象立刻釋放,autorelease消息會使對象放入內存釋放池中延遲釋放。   上代碼:   - (void)viewDidLoad   {   [super viewDidLoad];   NSBundle *bundle = [NSBundle mainBundle];   NSString *plistPath = [bundle pathForResource:@"team"   ofType:@"plist"];   //獲取屬性列表文件中的全部數據   self.listTeams = [[NSArray alloc] initWithContentsOfFile:plistPath];   }   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:    (NSIndexPath *)indexPath   {   static NSString *CellIdentifier = @”CellIdentifier”;   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];   if (cell == nil) {   cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault     reuseIdentifier:CellIdentifier];   }   NSUInteger row = [indexPath row];   NSDictionary *rowDict = [self.listTeams objectAtIndex:row];   cell.textLabel.text =  [rowDict objectForKey:@"name"];   NSString *imagePath = [rowDict objectForKey:@"image"];   imagePath = [imagePath stringByAppendingString:@".png"];   cell.imageView.image = [UIImage imageNamed:imagePath];   cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;   return cell;   }   - (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:message   delegate:self   cancelButtonTitle:@”Ok”   otherButtonTitles:nil];   [alert show];   [tableView deselectRowAtIndexPath:indexPath animated:YES];   } 大家看看上面的3個方法會有什麼問題呢?如果代碼是基於ARC的是沒有問題的,遺憾的是基於MRR,上面的代碼都存在內存洩漏的可能性。理論上講內 存洩漏是對象或變量沒有釋放引起的,但實踐證明並非所有的未釋放對象或變量都會導致內存洩漏,這與硬件環境和操作系統環境有關,因此我們需要檢測工具幫助 我們找到這些“洩漏點”。   在Xcode中提供了兩種工具幫助查找洩漏點:Analyze和Profile,Analyze是靜態分析工具可以通過菜單 Product→Analyze啟動,為靜態分析之後的代碼畫面;Profile是動態分析工具,這個工具叫“Instruments”,它是Xcode 集成在一起,可以在Xcode中通過菜單Product→Profile啟動,Instruments有很多Trace Template(跟蹤模板)可以動態分析和跟蹤內存、CPU和文件系統。
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved