Xcode 4静态代码分析问题

时间:2011-07-08 14:55:55

标签: ios4 xcode4 static-analysis clang-static-analyzer

这是我之前关于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标记为问题?

1 个答案:

答案 0 :(得分:1)

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