2

这是我的代码:标题:

#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它创建并在其上启动动画。第二个带有动作的按钮,它清除了我在其中创建的所有内容。当我从仪器开始时,我的程序有,当我按下按钮时它会变成动画,然后我按下 按钮,但它有相同的......为什么?我不会将我的内存清理为起始值(4 mb Real Mem)。请问,你能解释一下,我哪里有问题吗?UIImageViewNSMutableArraycleanMemorystartAnimationProfileActivity Monitor4 mb Real MemstartAnimation16 mb Real MemcleanMemory16 mb Real Mem

4

2 回答 2

2

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

来自苹果文档:

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

您可以使用

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

直接加载图像。

来自苹果文档:

此方法不缓存图像对象。

于 2012-01-20T20:34:45.017 回答
1

如果即使使用后+ (UIImage *)imageWithContentsOfFile:(NSString *)path您仍然无法释放内存,请致电imageView.animationImages = nil;

于 2012-01-20T21:52:21.580 回答