首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS中的xCode 4.3漏洞检测问题

iOS中的xCode 4.3漏洞检测问题
EN

Stack Overflow用户
提问于 2012-02-27 20:49:42
回答 1查看 717关注 0票数 7

我对xCode 4.3内存泄漏仪器有一个很奇怪的问题.基本上在以下情况下不起作用..。

support.

  • Create创建
  1. 项目--一个继承UIView
  2. 的简单类--使用“按钮”创建该类的实例并“泄漏”它.泄漏仪器

不会捕捉到泄漏

下面是问题类的代码

代码语言:javascript
复制
@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

现在我制造了泄密。

代码语言:javascript
复制
- (IBAction)leak:(id)sender {
    LeakTestView* leak=[[LeakTestView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
    NSLog(@"class is %@", [leak class]);
}

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

如果我将基类更改为NSObject,而不是initWithFrame重写init (请参阅下面),则会检测到泄漏.

下面是将被检测到的泄漏代码

代码语言:javascript
复制
@interface LeakTestView : NSObject
- (id) init;
@end


@implementation LeakTestView

- (id) init {
    NSLog(@"init called");
    self = [super init];
    if (self) {

    }
    return self;
}
@end

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

代码语言:javascript
复制
- (IBAction)leak:(id)sender {
    LeakTestView* leak=[[LeakTestView alloc]init];
    NSLog(@"class is %@", [leak class]);
}

有什么好主意吗?为什么不会检测到UIView子类的泄漏,但是将基类更改为NSObject将“修复”这个问题?是的,可以使用“标记堆”看到泄漏的对象--泄漏前的一个标记,单击按钮并创建泄漏后的一个标记--类将显示在堆增量中.

编辑:还有一个“有趣”的情况..。如果我删除"init“内容(只分配对象)

代码语言:javascript
复制
LeakTestView* leak=[LeakTestView alloc];

不管基类是什么,泄漏都会被发现.这到底是怎么回事?

EDIT2:还有一件“有趣”的事情。泄漏检测问题只能在模拟器中观察到(iOS 5.0,9A 334是我的),但是如果使用iPad设备,泄漏总是会被检测到。

有什么评论吗?如果你没有这个问题,或者认为我说的是“谎言”,告诉我我错了,上面的情况“很好”--我描述的泄漏是由你的xCode仪器检测到的!

EN

回答 1

Stack Overflow用户

发布于 2012-02-28 10:53:56

也许不是漏水?

您正在调用一个黑匣子的方法。如何实现UIView initWithFrame与您无关。它有各种各样的契约,但是你没有权利要求它泄漏更多,因为你可以假设保留计数是1。

泄漏是一个有用的工具,但它做不到你认为它做的事情。它不会告诉你什么时候你搞砸了。它告诉您何时有无法达到的分配。这不是一回事。

或者,可能是个窃听器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9472065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档