Проблема с памятью при загрузке изображений из библиотеки фотографий и сортировке их по дате

Я извлекаю изображения из своей библиотеки фотографий и в соответствии со свойством даты активов размещаю эти изображения в разных папках. Что я хочу сделать, так это получить изображение из библиотеки фотографий, сохранить их в соответствии с датой. например если полученное изображение от 23 апреля, сохраните его в папке «Апрель». Я использую для этого WSAssetPickerController. Пожалуйста, помогите мне решить проблему с памятью, так как мое приложение вылетает из-за проблемы с памятью на устройстве, это отлично работает в симуляторе.

- (void)storePhotos:(NSArray *)assets {

    int index = 0;

    for (ALAsset *asset in assets) {

        NSLog(@"Current asset :%@ ",asset);
        NSString *resourceDocPath = [[NSString alloc] initWithString:[[[[NSBundle mainBundle]  resourcePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"Documents"]];

        NSDateFormatter *format = [[NSDateFormatter alloc] init];
        [format setDateFormat:@"MMMM dd, yyyy"];

        NSString *photoDate = [format stringFromDate:[asset valueForProperty:ALAssetPropertyDate]];

        resourceDocPath = [resourceDocPath stringByAppendingPathComponent:photoDate];

        // Create directory & Check directory
        BOOL checkDir = [self createDocumentDirectory:resourceDocPath fileName:asset.defaultRepresentation.filename];

        if (!checkDir) {
            continue;
        }

        // Write image
        NSString *writablePhotoPath = [resourceDocPath stringByAppendingPathComponent:asset.defaultRepresentation.filename];
        [self writeImage:writablePhotoPath WithImage:asset.defaultRepresentation.fullScreenImage];

        index++;
    }
}

- (void)writeImage:(NSString*)pstrPhotoPath WithImage:(CGImageRef)pImage {

     if (![[NSFileManager defaultManager] fileExistsAtPath:pstrPhotoPath]){

         UIImage *image = [[UIImage alloc] initWithCGImage:pImage];
         NSData *imageData = UIImagePNGRepresentation(image);
         [imageData writeToFile:pstrPhotoPath atomically:YES];

     }
}

- (BOOL)createDocumentDirectory:(NSString*) pCurrentFolder fileName:(NSString*) pStrFileName  {

    if (![[NSFileManager defaultManager] fileExistsAtPath:pCurrentFolder]){

        if ([self checkPhotoIsExistInDocument:pStrFileName]) {
            return FALSE;
        }

        NSError* error;
        if ([[NSFileManager defaultManager] createDirectoryAtPath:pCurrentFolder withIntermediateDirectories:NO attributes:nil error:&error]) {
            // success
            return TRUE;
        } else {
            NSLog(@"[%@] ERROR: attempting to write create MyFolder directory", [self class]);
            NSAssert( FALSE, @"Failed to create directory maybe out of disk space?");
            return TRUE;
        }
        return TRUE;
    } else {
        return TRUE;
    }
}

- (BOOL)checkPhotoIsExistInDocument:(NSString*) pStrImageName {

    NSString *bundleRoot = [[NSString alloc] initWithString:[[[[NSBundle mainBundle]  resourcePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"Documents"]];
    NSFileManager *manager = [NSFileManager defaultManager];
    NSDirectoryEnumerator *direnum = [manager enumeratorAtPath:bundleRoot];

    NSString *filename;

    while ((filename = [direnum nextObject] )) {
//        NSLog(@"%@", filename);
        if ([filename hasSuffix:pStrImageName]) {
            return TRUE;
        }
    }

    return FALSE;
}

person iCoder    schedule 23.04.2013    source источник
comment
вы используете код ARC ??   -  person Leena    schedule 23.04.2013
comment
Да, я использую ARC в своем коде.   -  person iCoder    schedule 23.04.2013
comment
обнулите объекты, которые вы выделили, а также вы можете использовать инструмент утечки для управления своей памятью   -  person Leena    schedule 23.04.2013
comment
@Leena, стоит ли загружать все изображения из фотобиблиотеки в приложение.   -  person iCoder    schedule 23.04.2013
comment
я тоже загрузил все изображения, но я загрузил миниатюры изображений в виде таблицы   -  person Leena    schedule 23.04.2013
comment
@Leena Я тоже хочу отсортировать изображения в виде сетки по дате   -  person iCoder    schedule 23.04.2013
comment
я тоже отсортировал изображения в gridview по дате   -  person Leena    schedule 23.04.2013


Ответы (1)


Используете ли вы ARC в своем проекте? Потому что вы не выпустили никаких объектов, которые вы выделяете и инициализируете.

resourceDocPath
format
image
bundleRoot

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

person Deepesh Gairola    schedule 23.04.2013