这是我的代码:
标头:
#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
操作的按钮,该按钮创建UIImageView
,NSMutableArray
并在其上开始动画。第二个按钮带有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/