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);
}

私には、このコードの見た目から、リリースする必要がある 2 つのオブジェクト (cameraUI と theString) があります。ただし、analyze 関数は、両方のオブジェクトが alloc-init から返されたとしても、メソッドの最後で解放する必要があるのは theString のみであることを正しく識別します。

ここでの質問は、静的コード アナライザーが cameraUI を問題としてフラグ付けしないことをどのように認識しているのかということです。

4

1 に答える 1

1

これを静的アナライザーのバグと呼びます。cameraUI に割り当てられた UIImagePickerController インスタンスは、ガベージ コレクションされていない環境 (iOS など) でリリースまたは自動リリースする必要があります。

于 2011-07-08T16:24:39.413 に答える