Я преобразовал весь свой проект в 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?