使用Leaks运行我的应用程序后,我发现以下泄漏。泄漏发生在分配shimmer
和shimmerAnimation
的位置。我看不出会导致这种泄漏的原因。有人能指出我正确的方向吗?
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];
答案 0 :(得分:2)
将shimmerAnimation对象添加为self的子视图。那将保留它。如果自我泄漏,那么你的微光动画也会泄漏,并且由于它保持闪烁,它也会泄漏。所以我会检查自己,看看它在做什么。
对[UIImage imageNamed:...]的调用会缓存它们加载的图像。我不认为那些是泄密的。
哦,你正在使用[UIView setAnimationDelegate:]但是你没有调用[UIView beginAnimation:]这意味着didStopSelector将永远不会被调用,因此,如果你使用它来从子视图中删除它(你是)它不会。你最有可能是罪魁祸首。
[UIView setAnimationDelegate:]和朋友用于UIView动画,不用于UIImageView图像动画。