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と2つのボタンとのviewを持っています。 startAnimationアクションの最初のボタン。UIImageViewNSMutableArrayが作成され、アニメーションが開始されます。私がstartAnimationで作成したすべてのものを消去するcleanMemoryアクションの2番目のボタン。 ProfileActivity Monitorで開始すると、私のプログラムはstartAnimationボタンを押して16 mb Real Memに変わり、アニメーション後にcleanMemoryボタンを押しますが、同じ16 mb Real Mem ...同じ理由があります。なぜですか?私は私の記憶を始まった価値(4メガバイトリアルMem)にきれいにするつもりはない。どうか問題があるのですか?

答えて

1

UIImage imageNamed:は、画像をキャッシュし、自分のスケジュールでメモリを解放します。キャッシュを必要としない場合は、メモリを完全に制御してから、UIImage imageNamed:ではなく画像を直接ロードします。アップルのドキュメントから

この方法は、それが存在する場合、オブジェクト 指定された名前とリターンの画像オブジェクトのためのシステムキャッシュ内を検索します。一致する イメージオブジェクトがキャッシュに存在しない場合、このメソッドは指定されたファイルから画像 をロードし、キャッシュしてから 結果オブジェクトを返します。

あなたは直接画像を読み込むために

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

を使用することができます。

アップルのドキュメントから:

この方法は、画像オブジェクトをキャッシュしません。

1

でも+ (UIImage *)imageWithContentsOfFile:(NSString *)pathを使用した後、あなたはまだ空きメモリを取得していない場合は、TyrはimageView.animationImages = nil;

を呼び出します
関連する問題