iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了objective-c – 为什么仪器没有发现这种泄漏?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

快一个人.快速浏览下面的代码片段.我分配了UILabel * textLabel,但我没有释放它(注释掉).当方法结束时,我失去了对指针的引用,因此它会泄漏. 事情是,XCode instruments没有发现这种泄漏,我认为它是一个非常直接的案例,它找到它.它没有报告我的应用程序中的任何泄漏,但我自己发现了这个,它让我有点怀疑. 我是在寻找一些东西还是仪器在检测泄漏方面相当差劲? -(UITab
一个人.快速浏览下面的代码片段.我分配了UILabel * textLabel,但我没有释放它(注释掉).当方法结束时,我失去了对指针的引用,因此它会泄漏.

事情是,XCode instruments没有发现这种泄漏,我认为它是一个非常直接的案例,它找到它.它没有报告我的应用程序中的任何泄漏,但我自己发现了这个,它让我有点怀疑.

我是在寻找一些东西还是仪器在检测泄漏方面相当差劲?

-(UITableViewCell*)newReadOnlyCellWithtitle:(NSString*)title andText:(NSString*)text {
    UITableViewCell *cell=[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reusEIDentifier:nil] autorelease];
    cell.textLabel.text=title;
    cell.SELEctionStyle=UITableViewCellSELEctionStyleNone;
    cell.BACkgroundColor=[UIColor whiteColor];
    cell.opaque=YES;

    UILabel *textLabel=[[UILabel alloc] initWithFrame:CGRectMake(80,11,350,24)];
    textLabel.text=text;
    textLabel.textColor=[UIColor lightTextColor];
    textLabel.font=[UIFont fontWithName:STANDARD_FONT size:16.0];
    textLabel.opaque=YES;
    textLabel.BACkgroundColor=[UIColor clearColor];
    [cell.contentView addSubview:textLabel];
    //[textLabel release]; //<== without the release this should leak,yep?
    return cell;
}

编辑:静态分析器的输出……

解决方法

仪器的泄漏检测通过保守扫描内存,寻找指针和构建分配之间的连接图来实现.如果它找到了可以从全局变量或堆栈变量到达的内存中对象的任何指针,则该对象不能被视为泄漏.

仪器不知道指针的布局或上下文.如果你是malloc(1024)并且在那个[再循环]的内存块中碰巧有一堆指针,即使你再也不会将这些指针视为真正的引用,这些指针也会计算在内.

所以,不,泄漏永远不会100%准确.同样,泄漏内存的方法远远多于实际泄漏.如果你有一个全局缓存,像这样:

NSMutableDictionary *myGlobalCache;

你要填充缓存,但从不修剪它,这将是一个有效的内存泄漏,并且没有任何方式它会出现在仪器中.

我写了一篇关于Heapshot analysis的深入讨论,这是相关的,也可能是有意义的.

大佬总结

以上是大佬教程为你收集整理的objective-c – 为什么仪器没有发现这种泄漏?全部内容,希望文章能够帮你解决objective-c – 为什么仪器没有发现这种泄漏?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。