XCode分析器报告垃圾


- (UIImage*)returnRandomBackground{
    int selectedImage = (arc4random() % 4) + 1;
    UIImage *imageToReturn;
    if (selectedImage == 1) {
        imageToReturn = Image1;
    }
    else if (selectedImage == 2) {
        imageToReturn = Image2;
    }
    else if (selectedImage == 3) {
        imageToReturn = Image3;
    }
    else if (selectedImage == 4) {
        imageToReturn = Image4;
    }
    return imageToReturn;
}

未定义或返回给调用者的垃圾值。

对我来说这段代码看起来是合法的,有什么问题吗?

编译器不够聪明,无法推断出(arc4random() % 4) + 1总是在[1..4]范围内。只要将imageToReturn初始化为null,警告就会消失。

注意:如果你使用这个,并且在某些时候你改变了随机数生成中的模数,如果你不相应地调整你的if/else序列,你很容易将null s返回给调用者(没有来自友好编译器的警告)。
如果这不是您想要的,请在某处使用断言(可能通过添加"catch-all"else子句并在那里断言)。

另外,考虑在这里使用switch块而不是if/else序列,在我看来这是最自然的结构。

编译器会认为可能存在selectedImage = 5,这意味着imageReturn有可能未被赋值。您必须将最后一个else if更改为else,以确保始终分配imageReturn

看看如果selectedImage = 5,代码会做什么。它会打破。

或者,您可以直接初始化imageToReturn

UIImage *imageToReturn = nil;

那么,无论发生什么,您都不会返回一个垃圾值。

最新更新