【问题标题】:What does this Heapshot mean?这个 Heapshot 是什么意思?
【发布时间】:2011-10-12 18:46:19
【问题描述】:

我一直在对某个进程进行快照。所有镜头中的所有泄漏对象均源自此方法:

- (void)setArticle:(Article *)article
{
    if (_article != article)
    {
        [self.navigationController popToViewController:self animated:YES];

        [_article removeObserver:self forKeyPath:kArticleObservationKey];
        [_article release];
        _article = [article retain];

        [_article addObserver:self forKeyPath:kArticleObservationKey options:NSKeyValueObservingOptionNew context:&__ArticleObservingContext];

        [_article loadIfNeededWithPriority:OGRequestPriorityHigh downloadAllImage:NO];
        [_article fetchRelatedStories];
    }

    [self resetArticleView]; // 65% of heapshot allocations

    if ([_article.isStub boolValue])
    {
        [self.view showSpinner];
    }

    if (_article)
    {
        [Analytics articleReadWithParmeters:[NSDictionary dictionaryWithObject:_article.idOnServer forKey:AnalyticsKeyArticleId]]; // 32% of heapshot allocations
    }
}

这是实际的快照,它们看起来都与此相同:

我有几个问题:

  1. 我的下一步是什么?我没有看到这种方法有任何泄漏,为什么它在 heapshots 中如此突出?
  2. [self resetArticleView] 旁边有 65%,但该特定方法没有显示在我的泄漏对象的堆栈跟踪中。我是否误解了特定的 65% 指定的含义?如果它确实意味着它包含 65% 的泄漏分配,为什么该方法不在任何堆栈跟踪中?

【问题讨论】:

    标签: memory-management memory-leaks instruments heapshot


    【解决方案1】:

    在分配工具中打开保留事件跟踪,看看是什么保留了对象...

    您也可能会觉得这很有趣。 When is a Leak not a leak? Heapshot Analysis

    请注意,泄漏点和分配点可能不同,这就是为什么您会看到显示的方法不会出现在任何当前回溯中;该方法可能是分配的来源,但泄漏本身是由于其他地方的过度保留。

    (我不确定你指的是什么 % - 有截图吗?)

    【讨论】:

    • 这就是我所需要的。所有对象都在我们的分析框架内泄露,因此它们实际上是遥不可及的。
    • 当您在这里时,您能告诉我[self resetArticleView] 旁边的“65%”是什么意思吗?在 heapshot 中找到的所有对象都不是来自该方法。这个数字代表什么?
    • 在哪里开启“保留事件跟踪”?我似乎在分配工具中找不到这个选项。每次我尝试查看对象的保留历史时,我似乎都找不到任何东西。
    猜你喜欢
    • 2011-04-11
    • 2018-10-29
    • 1970-01-01
    • 2017-05-25
    • 2010-10-03
    • 2013-02-21
    • 2015-01-09
    • 2015-06-22
    • 1970-01-01
    相关资源
    最近更新 更多