使用xCode 4.3在iOS中出现泄漏检测问题

使用xCode 4.3在iOS中出现泄漏检测问题,第1张

概述我对xCode 4.3内存泄漏仪器有一个非常奇怪的问题……基本上它在以下情况下不起作用…… >在没有ARC支持的情况下创建项目. >创建一个继承UIView的简单类 >使用“按钮”创建此类的实例并“泄漏”它……泄漏不会被泄漏仪器捕获 所以这里是PROBLEMATIC类的代码 @interface LeakTestView : UIView- (id)initWithFrame:(CGRect) 我对xCode 4.3内存泄漏仪器有一个非常奇怪的问题……基本上它在以下情况下不起作用……

>在没有ARC支持的情况下创建项目.
>创建一个继承UIVIEw的简单类
>使用“按钮”创建此类的实例并“泄漏”它……泄漏不会被泄漏仪器捕获

所以这里是PROBLEMATIC类的代码

@interface LeakTestVIEw :  UIVIEw- (ID)initWithFrame:(CGRect)frame;@end@implementation LeakTestVIEw- (ID)initWithFrame:(CGRect)frame{    NSLog(@"initWithFrame called");    self = [super initWithFrame:frame];    if (self) {        // Initialization code    }    return self;}@end

现在我创造了泄漏……

- (IBAction)leak:(ID)sender {    LeakTestVIEw* leak=[[LeakTestVIEw alloc]initWithFrame:CGRectMake(0,100,100)];    NSLog(@"class is %@",[leak class]);}

所以问题是这个泄漏不会被发现……

如果我将基类更改为NSObject而不是initWithFrame重写init(请参阅下面的内容),那么将检测到泄漏….

所以这里是将被检测到的泄漏代码

@interface LeakTestVIEw : NSObject- (ID) init;@end@implementation LeakTestVIEw- (ID) init {    NSLog(@"init called");    self = [super init];    if (self) {    }    return self;}@end

如果我现在创建对象并离开它 – 泄漏检测将触发,泄漏将被“看到”仪器.

- (IBAction)leak:(ID)sender {    LeakTestVIEw* leak=[[LeakTestVIEw alloc]init];    NSLog(@"class is %@",[leak class]);}

有什么想法发生了什么?为什么不会检测到UIVIEw子类的泄漏,但是将基类更改为NSObject会“解决”这个问题?
哦,是的,使用“标记堆”可以看到泄漏的对象 – 泄漏前的一个标记和我点击按钮后创建泄漏的一个标记 – 该类将被看到堆三角形…

编辑:一个更“有趣”的情况……如果我删除“init”的东西(只分配对象)

LeakTestVIEw* leak=[LeakTestVIEw alloc];

无论什么是基类,都会检测到泄漏……这到底是怎么回事?

编辑2:一个更“有趣”的事情.泄漏检测问题只能在模拟器中观察到(iOS 5.0,9A334是我的),但如果使用iPad设备,则会始终检测到泄漏…

任何意见?如果你没有问题或考虑我说“谎言”只是告诉我我错了,上面的案例工作“很好” – 我描述的泄漏被xCode工具检测到!

解决方法 也许它没有泄漏?

您正在调用一个黑盒子的方法. UIVIEw initWithFrame是如何实现的,这不关你的事.它有各种合同,但你没有权利要求它泄漏,因为你可以假设保留计数为1.

泄漏是一种有用的工具,但它并不像你认为的那样做.当你搞砸了它时它并没有告诉你.它会告诉您何时有无法访问的分配.这不是一回事.

或者,它可能是一个错误.

总结

以上是内存溢出为你收集整理的使用xCode 4.3在iOS中出现泄漏检测问题全部内容,希望文章能够帮你解决使用xCode 4.3在iOS中出现泄漏检测问题所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存