objective-c – 为什么仪器没有发现这种泄漏?

objective-c – 为什么仪器没有发现这种泄漏?,第1张

概述快一个人.快速浏览下面的代码片段.我分配了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 – 为什么仪器没有发现这种泄漏?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1018997.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存