当前位置:编程学习 > wap >>

IPhone开发工具篇-利用xcode profile和易做图yze进行性能优化

内存泄漏问题的解决
 
内存泄漏(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和文件系统。
补充:移动开发 , IOS ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,