Как очистить память после анимации UIImageView - PullRequest
2 голосов
/ 21 января 2012

Вот мой код: Заголовок:

#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 Мб памяти).Пожалуйста, не могли бы вы объяснить, где у меня проблемы?

Ответы [ 2 ]

1 голос
/ 21 января 2012

Если даже после использования + (UIImage *)imageWithContentsOfFile:(NSString *)path вы все еще не можете освободить память, вы вызываете imageView.animationImages = nil;

1 голос
/ 21 января 2012

UIImage imageNamed: кэширует изображения и освобождает память по собственному расписанию.Если вы не хотите, чтобы кеширование полностью контролировало память, загрузите изображение напрямую, а не с помощью UIImage imageNamed:.

Из документов Apple:

Этот метод выглядит всистема кэширует объект изображения с указанным именем и возвращает этот объект, если он существует.Если соответствующий объект изображения еще не находится в кэше, этот метод загружает данные изображения из указанного файла, кэширует его и затем возвращает полученный объект.

Вы можете использовать

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

для прямой загрузки изображения.

Из документов Apple:

Этот метод не кэширует объект изображения.

...