Существует два времени выполнения для Cocoa/Objective-C: устаревшая среда выполнения и «современная» среда выполнения (это то, что Apple называет).iPhone Simulator: создавать ошибки при использовании синтезированных переменных экземпляра
Согласно Apple's documentation, «Приложения для iPhone и 64-разрядные программы на Mac OS X версии 10.5 и более поздние версии используют современную версию времени выполнения».
Пока все хорошо.
Теперь «современная» среда исполнения поддерживает функцию «синтезированные переменные экземпляра», что означает, что вам не нужно определять переменную экземпляра для каждого объявленного свойства. Переменная экземпляра будет добавлена автоматически. Цитата из iPhone Reference Library: «. Для современных сред выполнения, переменные экземпляра синтезируются в случае необходимости Если переменная экземпляра одного и того же именем уже существует, он используется»
Если вы используете эту функцию в вашем iPhone приложение, он строит и отлично работает на iPhone (физическом) устройстве, но когда вы меняете цель на «iPhone Simulator», вы получаете ошибки сборки:
синтезированное свойство 'x' должно быть либо именованным так же, как совместимый ivar или должны явно называть ivar
Что здесь происходит? Разве симулятор iPhone не настоящий симулятор iPhone? Означает ли это, что симулятор использует другое время выполнения, чем физический iPhone?
Как я могу использовать эту функцию на симуляторе iPhone?
EDIT:
код, который не компилируется в информировании iPhone Simulator является:
@interface MyClass : NSObject {
}
@property NSString *prop1;
@end
Согласно документации, это должно работать на "современном" время выполнения , и действительно, это происходит на устройстве iPhone, но он не компилируется при изменении цели на iPhone Simulator.
Это правильно - это ошибка в текущем тренажере. В этом была тема SO (что я не могу найти - возможно, это был поток какао-dev), а также это: http://iphonedevelopment.blogspot.com/2009/06/runtime-madness.html –
@ Даниэль: этот комментарий стоит пересчитать как ответ –
Я считаю, что это было исправлено в 4.0 или 4.1 SDK. –