2

這裏是我的代碼: 標題:如何UIImageView的動畫完成後,清理內存

#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中創建的所有內容。 當我開始ProfileActivity Monitor儀器,我的程序有4 mb Real Mem,當我按startAnimation按鈕它的更改爲16 mb Real Mem和動畫後我按01​​按鈕,但它有相同的16 mb Real Mem ...爲什麼?我不會清理我的記憶以開始價值(4 MB Real Mem)。請你能解釋一下,我哪裏有問題?

回答

1

UIImage imageNamed:緩存圖像,並將釋放它自己的時間表上的內存。如果你不想緩存,那完全控制內存,然後直接加載圖像,而不是UIImage imageNamed:

從Apple文檔:

這個方法查找系統中的高速緩存用於與 指定名稱和對象(如果存在)返回一個圖像對象。如果匹配的 圖像對象尚未存在於緩存中,則此方法從指定文件加載圖像 數據,將其緩存,然後返回結果對象 。

您可以使用

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

直接加載圖像。

從Apple文檔:

此方法不緩存圖像對象。

1

如果即使使用+ (UIImage *)imageWithContentsOfFile:(NSString *)path後你仍然沒有得到釋放內存,酪氨酸調用imageView.animationImages = nil;