XCode Analyzer сообщает о мусоре Обь - PullRequest
1 голос
/ 24 декабря 2011
- (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;
}

Не определено или значение мусора возвращено вызывающей стороне.

Для меня этот код выглядит законным, что с ним не так?

Ответы [ 3 ]

2 голосов
/ 24 декабря 2011

Компилятор недостаточно умен, чтобы сделать вывод, что (arc4random() % 4) + 1 всегда находится в диапазоне [1..4].Просто инициализируйте imageToReturn в ноль, и предупреждение исчезнет.

Примечание: если вы используете это, и в какой-то момент вы меняете модуль в генерации случайных чисел, выможет вернуть null s вызывающей стороне (без предупреждения вашего дружественного компилятора), если вы не адаптируете свою последовательность if / else соответствующим образом.
Если это не то, что вам нужно, используйте утверждениегде-то (возможно, добавив «catch-all» else предложение и указав там).

Также рассмотрите возможность использования здесь блока switch вместо последовательности if / else, этосамая естественная конструкция здесь, на мой взгляд.

0 голосов
/ 24 декабря 2011

В качестве альтернативы - вы можете просто инициализировать imageToReturn

UIImage *imageToReturn = nil;

Тогда, что бы ни случилось, вы не будете возвращать значение мусора.

0 голосов
/ 24 декабря 2011

Компилятор подумает, что возможно, что есть selectedImage = 5, что означает, что есть вероятность, что imageReturn останется не назначенным.Вам придется изменить последний else if на else, чтобы всегда назначать imageReturn.

Посмотрите, что будет делать код, если selectedImage = 5.Это сломается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...