这个快照是什么意思?

时间:2011-07-25 17:04:20

标签: memory-management memory-leaks instruments heapshot

我一直在拍摄某个过程的快照。所有镜头中所有泄漏的物体都源于这种方法:

- (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
    }
}

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

Heapshot

我几乎没有问题:

  1. 我接下来的步骤是什么?我没有看到这种方法有任何泄漏,为什么它在快照中如此突出?
  2. [self resetArticleView]旁边有一点65%,但是这个特定方法没有出现在我泄露的对象的堆栈跟踪中。我误解了65%的特定名称是什么意思吗?如果它确实意味着它包含65%的泄漏分配,为什么该方法不在任何堆栈跟踪中?

1 个答案:

答案 0 :(得分:3)

在分配工具中启用保留事件跟踪,并查看保留对象的内容......

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

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

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