0

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

- (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% 的泄漏分配,为什么该方法不在任何堆栈跟踪中?
4

1 回答 1

3

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

你也可能会觉得这很有趣。 什么时候泄漏不是泄漏?重点分析

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

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

于 2011-07-26T14:48:05.047 回答