2011-06-27 33 views
0

当我做动画的下一个代码:动画在Xcode

NSArray *images=[NSArray arrayWithObjects:[UIImage imageNamed:@"shavit_1.png"],[UIImage imageNamed:@"shavit_1.png"],[UIImage imageNamed:@"shavit_2.png"],[UIImage imageNamed:@"shavit_3.png"],[UIImage imageNamed:@"shavit_4.png"],[UIImage imageNamed:@"shavit_5.png"],[UIImage imageNamed:@"shavit_6.png"],[UIImage imageNamed:@"shavit_7.png"],[UIImage imageNamed:@"shavit_8.png"],[UIImage imageNamed:@"shavit_9.png"],[UIImage imageNamed:@"shavit_10.png"],[UIImage imageNamed:@"shavit_11.png"],[UIImage imageNamed:@"shavit_12.png"],[UIImage imageNamed:@"shavit_13.png"],[UIImage imageNamed:@"shavit_14.png"],[UIImage imageNamed:@"shavit_15.png"],[UIImage imageNamed:@"shavit_16.png"],[UIImage imageNamed:@"shavit_17.png"],[UIImage imageNamed:@"shavit_18.png"],[UIImage imageNamed:@"shavit_19.png"],[UIImage imageNamed:@"shavit_20.png"],[UIImage imageNamed:@"shavit_21.png"],[UIImage imageNamed:@"shavit_22.png"],[UIImage imageNamed:@"shavit_23.png"],[UIImage imageNamed:@"shavit_24.png"],[UIImage imageNamed:@"shavit_25.png"],nil]; 


    shavitimage.animationImages=images; 
    shavitimage.animationDuration=2.0; 
    shavitimage.animationRepeatCount=1; 
    [shavitimage startAnimating]; 

    [images release]; //release the used array 

    [self performSelector:@selector(animation_ends) withObject:nil afterDelay:2.0];//after 2 seconds put astatic image 

    timer=[NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:NO]; 
} 

-(void)animation_ends{ 
    [shavitimage stopAnimating];//the UIImageView return to static mode 
    shavitimage.image=[UIImage imageNamed:@"shavit_25.png"]; 
    self.view.userInteractionEnabled=YES; 
} 

动画运作良好,并应用动画结束后运行良好。 但是当我做动画的下一个代码:

NSMutableArray *images=[NSMutableArray array]; //insrt the images dynamiclly 
for(int i=1;i<=25;i++) 
{ 
NSString *[email protected]"shavit_"; 
file=[file stringByAppendingFormat:@"%d",i]; 
NSString *filePath = [[NSBundle mainBundle] pathForResource:file ofType:@"png"]; 
[images addObject:[UIImage imageWithContentsOfFile:filePath]]; 
[file release];  
[filePath release];  
} 


shavitimage.animationImages=images; 
shavitimage.animationDuration=2.0; 
shavitimage.animationRepeatCount=1; 
[shavitimage startAnimating]; 

[images release]; //release the used array 

[self performSelector:@selector(animation_ends) withObject:nil afterDelay:2.0];//after 2 seconds put astatic image 

timer=[NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:NO]; 
} 

-(void)animation_ends{ 
    [shavitimage stopAnimating];//the UIImageView return to static mode 
    shavitimage.image=[UIImage imageNamed:@"shavit_25.png"]; 
    self.view.userInteractionEnabled=YES; 
} 

动画运作良好,但它叠after.why不会发生?

+0

当你运行第二段代码时,你将能够给出更多的细节: – learner2010

回答

1

不要释放自动释放的对象。

这就是它的要义。

一连串事件的评价: -

  1. 您创建一个自动释放的数组。 Retain Count = 1 (will diminish by 1 in near future)
  2. UIImageView当您设置animationImages时,对象将保留阵列。您可以释放数组。 Retain Count = 1
  3. 自动释放踢。Retain Count = 0 (object is deallocated)

现在UIImageView仍然认为它具有阵列的所有权。当它试图访问它时,它应该会导致错误。如果它不是动画,然后被释放,它会尝试发送release消息到解除分配的实例,这也会导致应用程序崩溃。所有这一切都是公平的假设,因为我们不知道框架是否以任何方式添加自己的内存管理调用。

现在这两个代码段都有相同的问题,都是不可靠的。

做一个好记忆的公民,并删除release电话。

+0

这不是问题。 – user702003

+0

谢谢,我解决了这个问题。 – user702003

0
@synthesize myImage; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    NSMutableArray *a = [NSMutableArray array]; 
    //[a addObject: [UIViewController ]]; 
    [a addObject:[UIImage imageNamed:@"1.gif"]]; 
    [a addObject:[UIImage imageNamed:@"2.gif"]]; 
    [a addObject:[UIImage imageNamed:@"3.gif"]]; 
    [a addObject:[UIImage imageNamed:@"4.gif"]]; 
    [a addObject:[UIImage imageNamed:@"5.gif"]]; 
    [a addObject:[UIImage imageNamed:@"6.gif"]]; 
    [a addObject:[UIImage imageNamed:@"7.gif"]]; 

    //[myImage initWithFrame:CGRectMake(0, 0, 131, 125)]; 

    myImage.animationImages = a; 
    myImage.animationDuration=5; 
    myImage.animationRepeatCount=0; 
    myImage.startAnimating; 
    [self.view addSubview:myImage]; 
} 
+0

请向您的代码段添加一个小的解释:-) – atxe