2011-04-14 104 views
0

運行我的應用程序使用泄漏時,我發現以下泄漏。泄漏發生在shimmershimmerAnimation被分配。我看不到會導致這種泄漏。有人能指出我正確的方向嗎?爲什麼這個UIImageView動畫泄漏?

float duration = .5f; 
NSArray *shimmer = [NSArray arrayWithObjects: 
        [UIImage imageNamed:@"shimmer_1.png"], 
        [UIImage imageNamed:@"shimmer_2.png"], 
        [UIImage imageNamed:@"shimmer_3.png"], 
        [UIImage imageNamed:@"shimmer_4.png"], 
        [UIImage imageNamed:@"shimmer_1.png"], nil]; 

UIImageView *shimmerAnimation = [[UIImageView alloc] initWithFrame:[self bounds]]; 
[UIView setAnimationDelegate:shimmerAnimation]; 
[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)]; 
[shimmerAnimation setAnimationImages:shimmer]; 
[shimmerAnimation setAnimationDuration:duration]; 
[shimmerAnimation setAnimationRepeatCount:1]; 
[shimmerAnimation startAnimating]; 
[self addSubview:shimmerAnimation]; 
[shimmerAnimation release]; 

回答

2

您將shimmerAnimation對象添加爲self的子視圖。這將保留它。如果自我泄漏,那麼你的閃爍動畫也會泄漏,並且由於它保持微光,它也會泄漏。所以我會檢查自己看看它在做什麼。

對[UIImage imageNamed:...]的調用緩存它們加載的圖像。儘管如此,我並不認爲這些會出現泄漏。

哦,你正在使用[UIView setAnimationDelegate:],但你沒有調用[UIView beginAnimation:]這意味着didStopSelector永遠不會被調用,因此,如果你使用它來從子視圖(你是)它不會。這是你最有可能的罪魁禍首。對於UIImageView動畫,使用朋友用於UIView動畫,使用而不使用

+0

哇,把我放在我的地方。謝謝! – 2011-04-14 17:04:43