2011-04-14 4 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가 호출되지 않습니다. 따라서 이것을 사용하면 didStopSelector가 호출되지 않습니다. 하위보기 (당신은) 그것이되지 않을 것입니다. 가장 가능성있는 범죄자가 있습니다.

[UIView setAnimationDelegate :] 및 UIView 애니메이션에 친구가 사용되는 경우 은 UIImageView 이미지 애니메이션의 경우이 아닙니다.

+0

와우, 내 자리에 넣어. 감사! –

관련 문제