Существует две среды выполнения для Cocoa / Objective-C: устаревшая среда исполнения и «современная» среда исполнения (так Apple называет это).
Согласно документации Apple , « приложения для iPhone и 64-разрядные программы в Mac OS X v10.5 и более поздних версиях используют современную версию среды выполнения ».
Пока все хорошо.
Теперь «современная» среда выполнения поддерживает функцию, называемую «синтезированные переменные экземпляра», что означает, что вам не нужно определять переменную экземпляра для каждого объявленного свойства. Переменная экземпляра будет добавлена автоматически. Цитата из Справочной библиотеки iPhone : " Для современных сред выполнения переменные экземпляра синтезируются по мере необходимости. Если переменная экземпляра с таким именем уже существует, она используется. "
Если вы используете эту функцию в своем приложении для iPhone, оно прекрасно работает и работает на iPhone (физическом) устройстве, но при изменении цели на «Симулятор iPhone» вы получаете ошибки сборки:
Синтезированное свойство 'x' должно называться так же, как и совместимый ivar, или должно явно именовать ivar
Что здесь происходит? Разве симулятор iPhone не является настоящим симулятором iPhone? Означает ли это, что симулятор использует другое время выполнения, чем физический iPhone?
Как я могу использовать эту функцию на симуляторе iPhone?
EDIT:
Код, который не компилируется при нацеливании на симулятор iPhone:
@interface MyClass : NSObject {
}
@property NSString *prop1;
@end
Согласно документации, это должно нормально работать в «современной» среде выполнения, и действительно работает на устройстве iPhone, но не компилируется при изменении цели на iPhone Simulator.