这是我的代码:
标头:

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController {
    UIImageView *imageView;
    NSMutableArray *arrayWithImages;
}
- (IBAction)startAnimation:(id)sender;
- (IBAction)cleanMemory:(id)sender;
@end

实现方式:
#import "ViewController.h"

@implementation ViewController

......

- (IBAction)startAnimation:(id)sender {
    imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)];

    arrayWithImages = [[NSMutableArray alloc] initWithObjects:
                                       [UIImage imageNamed:@"pic1"],
                                       [UIImage imageNamed:@"pic2"],
                                       [UIImage imageNamed:@"pic3"],
                                       [UIImage imageNamed:@"pic4"],
                                       [UIImage imageNamed:@"pic5"],
                                       [UIImage imageNamed:@"pic6"],
                                       [UIImage imageNamed:@"pic7"],
                                       [UIImage imageNamed:@"pic8"],nil];
    imageView.animationImages = arrayWithImages;
    imageView.animationDuration = 3;
    imageView.animationRepeatCount = 1;
    [self.view addSubview:imageView];

    [imageView startAnimating];
}

- (IBAction)cleanMemory:(id)sender {

    [arrayWithImages removeAllObjects];
    [arrayWithImages release];
    arrayWithImages= nil;

    [imageView removeFromSuperview];
    [imageView release];
    imageView = nil;
}
@end

我有两个按钮的ViewController及其view。第一个具有startAnimation操作的按钮,该按钮创建UIImageViewNSMutableArray并在其上开始动画。第二个按钮带有cleanMemory操作,可清除我在startAnimation中创建的所有内容。
当我使用Profile工具启动Activity Monitor时,我的程序为4 mb Real Mem,当我按下startAnimation按钮时,它更改为16 mb Real Mem,并且在动画后我按下了cleanMemory按钮,但是它具有相同的16 mb Real Mem ...为什么?我不会将内存清理为初始值(4 mb Real Mem)。请,您能解释一下我哪里有问题吗?

最佳答案

UIImage imageNamed:缓存图像,并将按自己的时间表释放内存。如果您不想要缓存,那就是完全控制内存,然后直接加载图像,而不是使用UIImage imageNamed:

从Apple文档中:

此方法在系统缓存中查找带有
指定名称,并返回该对象(如果存在)。如果匹配
图像对象尚未在缓存中,此方法将加载图像
指定文件中的数据,将其缓存,然后返回
结果对象。

您可以使用

+ (UIImage *)imageWithContentsOfFile:(NSString *)path

直接加载图像。

从Apple文档中:

此方法不缓存图像对象。

关于ios - UIImageView动画后如何清理内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8947389/

10-10 11:59