2

这是我之前关于 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)。但是,analyze 函数正确地识别出只有 theString 需要在方法结束时释放,即使这两个对象都是从 alloc-init 返回的,根据我的经验,这始终意味着您在完成时释放。

我在这里的问题是,静态代码分析器如何知道不将 cameraUI 标记为问题?

4

1 回答 1

1

我将其称为静态分析器的错误。分配给 cameraUI 的 UIImagePickerController 实例在非垃圾收集环境(如 iOS)中释放或自动释放。

于 2011-07-08T16:24:39.413 回答