ARC ведет к большой заброшенной памяти - PullRequest
4 голосов
/ 15 января 2012

Я преобразовал весь свой проект в ARC, когда вышла iOS 5, и у меня еще не было EXC_BAD_ACCESS. Однако в последнее время я просматривал монитор памяти в приборах и заметил, что при каждом повторном выполнении одной и той же задачи (например, фотографирование) в кучу добавляется значительное количество объектов. Тем не менее, объекты, которые добавляются, определенно выглядят так, как будто они НЕ ДОЛЖНЫ храниться. Такие примеры включают в себя:

- (NSString *)imagesDirectory {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *folderDirectory = [documentsDirectory stringByAppendingPathComponent:@"Images"];
    NSFileManager *fileManager = [[NSFileManager alloc] init];
    [fileManager createDirectoryAtPath:folderDirectory withIntermediateDirectories:YES attributes:nil error:nil];
    fileManager = nil;
    return folderDirectory;

}

, где говорится, что объект fileManager не освобождается, а это:

UIImageView *transitionImage = [[UIImageView alloc] initWithImage:thumbnail];
        transitionImage.center = primeReviewButton.center;
        transitionImage.bounds = primeReviewButton.bounds;
        transitionImage.transform = orientationTransform;
        transitionImage.alpha = 0.0;

        [self.cameraView insertSubview:transitionImage belowSubview:photoNumberBadge];

        [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionAllowUserInteraction
                         animations:^{
                             transitionImage.alpha = 1; 
                         }
                         completion:^(BOOL finished){
                             transitionImage.alpha = 0;
                             transitionImage.image = nil;
                             [transitionImage removeFromSuperview];
}];

, где говорится, что animateWithDuration: как-то ответственен за оставленную память.

Я перепробовал все, что мог, чтобы эти объекты были освобождены так, как они должны (все, что Memory Monitor может рассказать о них, это то, что все они были Malloc-ed один раз и имеют счет сохранения 1). Это ошибка с ARC?

...