我一直在拍摄某个过程的快照。所有镜头中所有泄漏的物体都源于这种方法:
- (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
}
}
这是实际的快照,它们看起来都与此相同:
我几乎没有问题:
[self resetArticleView]
旁边有一点65%,但是这个特定方法没有出现在我泄露的对象的堆栈跟踪中。我误解了65%的特定名称是什么意思吗?如果它确实意味着它包含65%的泄漏分配,为什么该方法不在任何堆栈跟踪中?答案 0 :(得分:3)
在分配工具中启用保留事件跟踪,并查看保留对象的内容......
你也可能会觉得这很有趣。 When is a Leak not a leak? Heapshot Analysis
请注意,泄漏点和分配点可能不一样,这就是为什么你会看到显示的方法没有显示在任何当前的回溯中;该方法可能是分配的来源,但泄漏本身是由于其他地方的过度保留。
(我不确定你指的是什么% - 有截图吗?)