2012-07-12 63 views
1

我是IOS開發新手。 在我的應用程序中,我有幾個圖像,我是動畫。 圖像數量可能會有所不同。ios - 如何計算UIView動畫需要多少內存?

在ipad 2上運行時,動畫效果很好。 當在ipad 1上運行時,大量的圖像(20+)應用程序只會因爲內存警告而崩潰。

我想計算一個動畫將提前預留的內存量。 基於這個數字,我可以計算出是否通過我的動畫或跳過 到最終狀態。

這怎麼辦?

編輯:

我當前的代碼:

- (void)remix 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:animationDuration]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector: 
    @selector(animationDidStop:finished:context:)]; 

    self.currentStatus = canvas_status_animating; 
    NSMutableArray *circles = [[NSMutableArray alloc] init]; 

    for (CircleView* view in self.subviews) 
    { 
     if(![view isKindOfClass:[CircleView class]]) 
      continue; 
     [circles addObject:view]; 
    } 

    [self animatePosition:circles]; 

    [UIView commitAnimations]; 
} 


-(void) animatePosition:(NSArray*)circles 
{ 
    int maxWidth = self.bounds.size.width; 
    int maxHeight = self.bounds.size.height; 


    for (CircleView* view in circles) 
    { 
     int selectedX = 0; 
     int selectedY = 0; 
     if ((arc4random()%200)+1 > 100) 
     { 
      selectedX = (arc4random() % maxWidth) + 1; 
      selectedY = (arc4random() % 200) + 1; 
      selectedY = (selectedY > 100) ? (maxHeight - selectedY) : selectedY; 
     } 
     else 
     { 
      selectedX = (arc4random() % 200) + 1; 
      selectedX = (selectedX > 100) ? (maxWidth - selectedX) : selectedX; 
      selectedY = (arc4random() % maxHeight) + 1; 
     }         

     view.frame = CGRectMake(selectedX - view.frame.size.width/2, 
           selectedY - view.frame.size.height/2, 
           view.frame.size.width, 
           view.frame.size.height); 

    } 

} 

回答

3

你可以調用這個函數之前和之後,和calc的差異。

-(double)availableMemory 
{ 
    vm_statistics_data_t vmStats; 
    mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT; 
    kern_return_t kernReturn = host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)&vmStats, &infoCount); 

    if (kernReturn != KERN_SUCCESS) 
    { 
     return NSNotFound; 
    } 

    return ((vm_page_size * vmStats.free_count)/1024.0)/1024.0; 

} 
+0

運行動畫之前和之後?它有點錯過了這個觀點,好像我運行的是動畫並且沒有足夠的空閒內存,應用程序會崩潰 – vondip 2012-07-13 00:23:26

+0

您會在運行時檢查它嗎?內存檢查應該作爲一種優化技術來完成,而不是應用程序運行時的預防措施。如果你的動畫佔用太多的內存,你應該優化圖像,考慮從磁盤上傳輸它們,或者使用cocos2d,sprite或者其他的東西。我會告訴你,UIKit有延遲的動畫通常是動畫隊列,而不是內存。 – 2012-07-13 00:27:40

+0

你的意思是經常是動畫隊列而不是內存? – vondip 2012-07-13 00:31:42