这是我的代码: 部首:
#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
,动画后我按{{1} }}按钮,但它有相同的cleanMemory
...为什么?我不会清理我的记忆以启动价值(4 MB Real Mem)。请你解释一下,我有问题吗?
答案 0 :(得分:1)
UIImage imageNamed:
缓存图像并按照自己的计划释放内存。如果您不想进行缓存,则完全控制内存,然后直接加载图像,而不是UIImage imageNamed:
。
来自Apple文档:
此方法在系统缓存中查找具有的图像对象 指定名称并返回该对象(如果存在)。如果匹配 图像对象尚未在缓存中,此方法加载图像 来自指定文件的数据,缓存它,然后返回 结果对象。
您可以使用
+ (UIImage *)imageWithContentsOfFile:(NSString *)path
直接加载图片。
来自Apple文档:
此方法不会缓存图像对象。
答案 1 :(得分:1)
如果即使在使用+ (UIImage *)imageWithContentsOfFile:(NSString *)path
之后仍然无法释放记忆,请拨打imageView.animationImages = nil;