Оптимизация памяти для сетевого альбома Nimbus

У меня есть приложение, которое использует контроллер представления, который расширяет NetworkPhotoAlbumViewControllerкоторый в свою очередь расширяется NIToolbarPhotoViewController

В основном он реализует все протоколы NI, такие как NIPhotoAlbumScrollViewDataSource, NIPhotoScrubberViewDataSource, NIOperationDelegate, NIPhotoAlbumScrollViewDelegate и единственная настройка didReceiveMemoryWarning:

- (void) didReceiveMemoryWarning {
    NSLog(@"Nimbus Photo Album memory warning");
    [self.highQualityImageCache reduceMemoryUsage];
    [self.thumbnailImageCache reduceMemoryUsage];
    NSLog(@"Nimbus Photo Album end 0memory warning");
}

а также addOperation чтобы уменьшить количество одновременных загрузок:

-(void) addOperation: (AFImageRequestOperation *) operation {
    NSLog(@"operation queue size is %d", _queue.operationCount);

    BOOL found = NO;
    for (AFImageRequestOperation *op in _queue.operations) {
        if(!operation.isCancelled && [[operation.request.URL absoluteString] compare:[op.request.URL absoluteString]] == NSOrderedSame) {
            NSLog(@"found the same operation");
            found = YES;
            break;
        }
    }

    if(found) return;

    NSInteger cancelledCount = 0;
    if (_queue.operationCount > 5) {
        for (NSOperation *operation in _queue.operations) {
            if (operation.isCancelled) {
                cancelledCount ++;
            }
        }
    }

    NSLog(@"cancelled operation count is %d", cancelledCount);
    NSInteger count = _queue.operationCount;
    if(count - cancelledCount > 5) {
        for (NSOperation *operation in _queue.operations) {
            if(!operation.isCancelled) {
                NSLog(@"cancel operation");
                [operation cancel];
                break;
            }
        }
    }

    NSLog(@"operation is added into queue");
    [_queue addOperation:operation];
}

Приложение также использует AVFoundation для захвата фотографий, которые отправляются с полным разрешением на сервер (и загружаются позже в сетевой альбом).

Проблема в том, что если я использую NetworkPhotoAlbumViewController и затем переключитесь на захват фотографий, довольно часто приложение вылетает из-за нехватки памяти (объем памяти приложения может достигать 20-30 МБ), даже если didReceiveMemoryWarning а также reduceMemoryUsage называются.

Возможно ли, что я делаю что-то не так, и память не очищается правильно? Является ли проблема вызвана AFNetworking? И какие альтернативы есть загрузка некоторых изображений из Интернета и отображение их в фотоальбоме с загрузкой миниатюр, панорамированием и масштабированием?

0 ответов

Другие вопросы по тегам