私は特定のプロセスのヒープショットを撮ってきました。すべてのショットでリークされたすべてのオブジェクトは、次の方法で発生します。
- (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%が含まれていることを意味する場合、そのメソッドがスタックトレースに含まれていないのはなぜですか?