Оптимизация Xcode приводит к тому, что переменные возвращаются недействительными при первом использовании

Я создаю массив объектов. Эти объекты имеют общедоступную переменную. Когда у меня оптимизирована xcode-оптимизация, все в моем проекте отлично работает, но когда у меня есть какой-либо оптимизационный набор, все становится чересчур. В первый раз, когда я создаю один из этих объектов, correct переменная всегда возвращает false при доступе из другого класса. Но последующее создание этого объекта класса возвращает правильное значение для correct . Вот фрагмент моего кода и проблема.

.час

 @interface ShellQuestionAnswer : UIView { ... @public bool correct; ... } 

.m

 -(void)setLetter:(NSString*)letter forAnswer:(XMLNode*)answer withResponse:(XMLNode*)response { ... correct = [[[answer attributes] valueForKey:@"Correct"] isEqualToString:@"true"]; //Putting NSLog here shows "correct" to be true } 

И класс, который использует этот объект:

 -(void)addQuestion:(XMLNode*) rootNode ID:(NSString*)ID { ... answer1 = [[ShellQuestionAnswer alloc] initWithFrame:CGRectMake(0, currentY, textContainer.frame.size.width, 50)]; [answer1 setLetter:@"A" forAnswer:[answerstextArray objectAtIndex:0] withResponse:[responsestextArray objectAtIndex:0]]; currentY += answer1.frame.size.height + QUESTION_SEPARATION; if(!answerObjects) { answerObjects = [[NSMutableArray alloc] init]; } else { [answerObjects removeAllObjects]; } [answerObjects addObject:answer1]; answer2 = [[ShellQuestionAnswer alloc] initWithFrame:CGRectMake(0, currentY, textContainer.frame.size.width, 50)]; [answer2 setLetter:@"B" forAnswer:[answerstextArray objectAtIndex:1] withResponse:[responsestextArray objectAtIndex:1]]; currentY += answer2.frame.size.height + QUESTION_SEPARATION; [answerObjects addObject:answer2]; [textContainer addSubview:answer1]; [answer1 setUserInteractionEnabled:YES]; [textContainer addSubview:answer2]; [answer2 setUserInteractionEnabled:YES]; if([answerstextArray count] > 2) { answer3 = [[ShellQuestionAnswer alloc] initWithFrame:CGRectMake(0, currentY, textContainer.frame.size.width,50)]; [answer3 setLetter:@"C" forAnswer:[answerstextArray objectAtIndex:2] withResponse:[responsestextArray objectAtIndex:2]]; [textContainer addSubview:answer3]; currentY += answer3.frame.size.height + QUESTION_SEPARATION; [answerObjects addObject:answer3]; [answer3 setUserInteractionEnabled:YES]; } if([answerstextArray count] > 3) { answer4 = [[ShellQuestionAnswer alloc] initWithFrame:CGRectMake(0, currentY, textContainer.frame.size.width, 50)]; [answer4 setLetter:@"D" forAnswer:[answerstextArray objectAtIndex:3] withResponse:[responsestextArray objectAtIndex:3]]; [textContainer addSubview:answer4]; currentY += answer4.frame.size.height + QUESTION_SEPARATION; [answerObjects addObject:answer4]; [answer4 setUserInteractionEnabled:YES]; } [textContainer setNeedsDisplay]; for(ShellQuestionAnswer *answer in answerObjects) { if(answer->correct) //<-- always returns false the first time I run this function { if(!self.correctAnswer) { self.correctAnswer = [[NSMutableArray alloc] init]; } [self.correctAnswer addObject:answer]; } } } 

Я зарегистрировал все и не понимаю, почему answer->correct возвращает false, когда вне объекта, но внутри объекта answer correct переменная действительно истинна. И это происходит только при включенной оптимизации (в любом режиме) и только в первом экземпляре этого класса.

Если я изменю correct переменную в свойство вместо переменной public public, то проблема больше не будет присутствовать. Я в порядке с этим решением, но мне нехорошо не понимать, почему это происходит. Эта проблема может присутствовать в любом из других классов моего кода, и я не знаю, где, пока клиент не будет жаловаться на случайную причуду при первом запуске. Это неприемлемо для меня. У кого-нибудь есть идеи о том, почему оптимизация испортила мой код?

EDIT: Чтобы быть яснее, вот те примеры, которые я использую. Один работает, никто не делает (по указанному выше способу).

За работой:

 @interface ShellQuestionAnswer : UIView { ... @public //bool correct; ... } @property (nonatomic, assign) bool correct; 

Не работает:

 @interface ShellQuestionAnswer : UIView { ... @public bool correct; ... } 

Это единственные строки, измененные для получения рабочего набора (кроме answer->correct изменения для answer.correct внутри цикла for для случая свойства).

  • Удалить «Формат строки не является строковым литералом» предупреждение от xcode
  • Ориентация устройства запускает весь контроллер просмотра в приложении панели вкладок.
  • NSURLSession / NSURLConnection Ошибка загрузки HTTP и другие предупреждения AdMob для iOS 9
  • Когда я добавляю новых тестеров в TestFlight, я должен опубликовать новую сборку, чтобы они были «уведомлены»?
  • Как создать UITableViewController в Xcode 6 с помощью New> File ... template "wizard"
  • нужен генератор случайных слов, используя словарь
  • Создайте два приложения из одного (используя цели?)
  • IOS / Обновление до Xcode 8.3, вызывающее ошибки pngcrush libpng
  • (неатомные, readwrite, сохраняются) и (неатомные, сильные) в Objective-C ARC
  • Как использовать несколько отдельных ярлыков с Core Plot?
  • Ошибка при создании UIWebView Programmatically
  • Давайте будем гением компьютера.