Il existe deux temps d'exécution pour Cocoa/Objective-C: le runtime hérité et le runtime "moderne" (c'est ce que Apple appelle).iPhone Simulator: génération d'erreurs lors de l'utilisation de variables d'instance synthétisées
Selon Apple's documentation, "applications iPhone et les programmes 64 bits sur Mac OS X 10.5 et versions ultérieures utilisent la version moderne de l'exécution".
Jusqu'ici tout va bien. Maintenant, l'exécution "moderne" prend en charge une fonctionnalité appelée "variables d'instance synthétisées", ce qui signifie que vous n'avez pas besoin de définir une variable d'instance pour chaque propriété déclarée. La variable d'instance sera ajoutée automatiquement. Citation du iPhone Reference Library: «. Pour les runtimes modernes, les variables d'instance sont synthétisés au besoin Si une variable d'instance du même nom existe déjà, il est utilisé »
Si vous utilisez cette fonction dans votre application iPhone, il se construit et fonctionne bien sur l'iPhone (physique), mais lorsque vous changez de cible pour "iPhone Simulator", vous obtenez des erreurs de compilation:
La propriété synthétisée 'x' doit être nommée de la même manière qu'une ivar compatible ou doit nommer explicitement un ivar
Que se passe-t-il ici? Le simulateur d'iPhone n'est-il pas un vrai simulateur d'iPhone? Cela signifie-t-il que le simulateur utilise une durée d'exécution différente de celle de l'iPhone physique? Comment puis-je utiliser cette fonctionnalité sur le simulateur iPhone?
EDIT:
Le code qui ne compile pas lors du ciblage de l'iPhone Simulator est:
@interface MyClass : NSObject {
}
@property NSString *prop1;
@end
Selon la documentation, cela fonctionne bien sur le moteur d'exécution "moderne" , et en effet il le fait sur l'appareil iPhone, mais il ne compile pas lors du changement de la cible pour iPhone Simulator.
Ceci est correct - c'est un bug dans le simulateur en cours. Il y avait un sujet de SO à ce sujet (que je ne peux pas trouver - peut-être c'était un fil de cacao-dev), et aussi ceci: http://iphonedevelopment.blogspot.com/2009/06/runtime-madness.html –
@ Daniel: ce commentaire vaut le reposter comme réponse –
Je crois que cela a été corrigé dans le SDK 4.0 ou 4.1. –