数组只是不断添加对象和内存崩溃

时间:2013-10-25 04:04:30

标签: ios arrays memory

我最近遇到内存崩溃,我怀疑我无法清空数组,这是我的数组代码

- (void)viewDidLoad
{
   allImagesArray = [[NSMutableArray alloc] init];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *location=@"Bottoms";
    NSString *fPath = [documentsDirectory stringByAppendingPathComponent:location];
    NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: fPath];
    collectionBottoms.delegate =self;
    collectionBottoms.dataSource=self;
    for(NSString *str in directoryContent){
        NSLog(@"i");
        NSString *finalFilePath = [fPath stringByAppendingPathComponent:str];
        NSData *data = [NSData dataWithContentsOfFile:finalFilePath];
        if(data)
        {
            UIImage *image = [UIImage imageWithData:data];
            [allImagesArray addObject:image];
            NSLog(@"array:%@",[allImagesArray description]);

        }}
}

何我可以通过释放数组中的对象释放内存?

3 个答案:

答案 0 :(得分:1)

您将图像数组保存在Plist中。保存之后,只需重新初始化数组,它将清除数组中的内存。那你在使用ARC吗?因为ARC对此更为舒适。然后在-viewWillDisappear

中重新初始化或从数组中删除AllObject

答案 1 :(得分:0)

如果您使用此图片数组allImagesArray,则当视图可见时,请将此代码放在viewWillAppear的{​​{1}}或viewDidAppear方法中。

UIViewController

然后,在- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; allImagesArray = [[NSMutableArray alloc] init]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *location=@"Bottoms"; NSString *fPath = [documentsDirectory stringByAppendingPathComponent:location]; NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: fPath]; collectionBottoms.delegate =self; collectionBottoms.dataSource=self; for(NSString *str in directoryContent){ NSLog(@"i"); NSString *finalFilePath = [fPath stringByAppendingPathComponent:str]; NSData *data = [NSData dataWithContentsOfFile:finalFilePath]; if(data) { UIImage *image = [UIImage imageWithData:data]; [allImagesArray addObject:image]; NSLog(@"array:%@",[allImagesArray description]); } } } 的viewWillDisappear / viewDidDisappear方法中发布它。

UIViewController

或者,快速,肮脏但安全修复(不知道您使用- (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; [allImagesArray removeAllObjects]; //[allImagesArray release]; // (Uncomment) Call this only if you are not using ARC. } ) -

allImagesArray

答案 2 :(得分:0)

嗨,只需在对象工作结束后释放内存即可。这是给你的代码。

- (void)viewDidLoad
{
   allImagesArray = [[NSMutableArray alloc] init];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *location=@"Bottoms";
    NSString *fPath = [documentsDirectory stringByAppendingPathComponent:location];
    NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: fPath];
    collectionBottoms.delegate =self;
    collectionBottoms.dataSource=self;
    for(NSString *str in directoryContent)
    {
        NSString *finalFilePath = [fPath stringByAppendingPathComponent:str];
        NSData *data = [NSData dataWithContentsOfFile:finalFilePath];
        if(data)
        {
            UIImage *image = [UIImage imageWithData:data];
            [allImagesArray addObject:image];
            NSLog(@"array:%@",[allImagesArray description]);
        image = nil;

        }
    finalFilePath=nil;
    data=nil;
   }

 paths= nil;
 documentsDirectory= nil;
 location= nil;
 fPath= nil;
 directoryContent = nil;
}