iPhone - другое логическое значение по умолчанию на устройстве - PullRequest
4 голосов
/ 25 ноября 2011

Недавно у меня было немного кода, отлично работающего на симуляторе и испорченного на устройстве. Зачем? - Это очень просто, но я не могу объяснить объяснение.

Я провел небольшое тестирование, создав новое приложение на основе представления, добавил метку и выход для метки и написал этот код в viewDidLoad:

BOOL b;
if (b) {
    label.text = @"Value = YES";
}
else {
    label.text = @"Value = NO";
}

Интересно, что вот результаты:

Симулятор iOS (4.2): значение = НЕТ
Симулятор iOS (4.3): значение = НЕТ
iPod Touch 2G (4.2.1) Значение = ДА
iPhone 3G (4.2.1) ) Значение = ДА

Что это говорит? - Для меня это выглядит так, что на устройствах логическое значение по умолчанию - YES, а на симуляторе логическое значение по умолчанию - NO.

Может кто-нибудь уточнить, так ли это? Также, если бы кто-то мог объяснить это поведение, мне было бы очень интересно.

Я не заинтересован в решении проблемы, ясно, что это можно решить, установив желаемое значение по умолчанию (в моем случае NO) вручную.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 25 ноября 2011

Objective-C - это просто расширенный набор C, а в C объявление такой переменной просто дает ей память в стеке.При объявлении переменной ничего не задается, поэтому то, что было последним в стеке, теперь находится в вашей переменной b.

Короче говоря, оно не определено и будет варьироваться от реализации к реализации.Это то, что говорится в спецификации.

4 голосов
/ 25 ноября 2011

Неопределенное поведение не определено.

...