2011-06-27 64 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