Le problème est que les catégories sont logiquement séparées de leurs classes et sont même stockées séparément dans le fichier binaire. L'implémentation interne est qu'une structure de description de classe contient un tableau de listes de méthodes qui, au départ, ne contient que la liste des méthodes définies dans la catégorie principale @implementation
bloc. Au fur et à mesure que les modules de liaison ObjC chargent de nouvelles catégories, leurs listes de méthodes sont ajoutées à ce tableau.
En raison de cette implémentation, les catégories elles-mêmes n'ont aucun moyen d'accéder au stockage d'une classe et ne peuvent donc pas la modifier (cela soulève également la question de savoir ce qu'il faut faire lorsque la catégorie est déchargée).
Enfin, d'un point de vue plus logique que technique, l'idée est qu'une catégorie ne possède pas la structure en mémoire d'une classe, elle y associe simplement de nouvelles méthodes. Pour prendre pleinement en charge la synthèse des propriétés, elle devrait modifier le stockage de la classe d'une manière ou d'une autre
La solution ? Soit vous placez les instructions @synthesize dans votre bloc principal @implementation, soit vous implémentez vos propres accesseurs directement dans la catégorie @implementation.