ios - 如何计算UIView动画将占用多少内存?

时间:2012-07-12 22:49:17

标签: ios memory uiview

我是IOS开发的新手。 在我的应用程序中,我有几个我正在制作动画的图像。 图像数量可能会有所不同。

在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);

    }

}

1 个答案:

答案 0 :(得分:3)

您可以在之前和之后调用此函数,并计算差异。

-(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;

}