Вопрос анализа статического кода Xcode 4 - PullRequest
2 голосов
/ 08 июля 2011

Это продолжение моего вопроса ранее о статическом анализаторе Xcode 4.Это не является специфической проблемой, так как у меня сейчас код работает так, как нужно, но мне просто интересно, как все работает за кулисами.Рассмотрим следующий код:

- (IBAction)cameraButtonPressed:(id)sender
{
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == NO)
    {
        return;
    }

    UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init];
    cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;
    cameraUI.allowsEditing = NO;
    cameraUI.delegate = self;
    [self presentModalViewController:cameraUI animated:YES];

    NSString *theString = [[NSString alloc] initWithString:@"cameraButtonPressed done"];
    NSLog(@"%@", theString);
}

Для меня, как выглядит этот код, есть два объекта (cameraUI и theString), которые необходимо освободить.Однако функция анализа правильно определяет, что в конце метода нужно освобождать только theString, даже если оба объекта возвращаются из alloc-init, что, по моему опыту, всегда означает, что вы освобождаете, когда закончите.

Вопрос, который у меня возникает, состоит в том, как статический анализатор кода может не отмечать CameraUI как проблему?

1 Ответ

1 голос
/ 08 июля 2011

Я бы назвал это ошибкой со статическим анализатором. Экземпляр UIImagePickerController, назначенный для cameraUI , должен быть освобожден или автоматически освобожден в среде без сбора мусора (например, iOS).

...