Das Problem besteht darin, dass Kategorien logisch von ihren Klassen getrennt sind und sogar separat in der Binärdatei gespeichert werden. Die interne Implementierung besteht darin, dass eine Klassenbeschreibungsstruktur ein Array von Methodenlisten enthält, das anfangs nur die Liste der Methoden enthält, die in der Haupt @implementation
blockieren. Wenn die ObjC-Linkermodule neue Kategorien laden, werden ihre Methodenlisten zu diesem Array hinzugefügt.
Aufgrund dieser Implementierung haben die Kategorien selbst keine Möglichkeit, auf den Speicher einer Klasse zuzugreifen, und können ihn daher nicht ändern (es stellt sich auch die Frage, was zu tun ist, wenn die Kategorie entladen wird).
Aus einer eher logischen als technischen Perspektive schließlich ist die Idee, dass eine Kategorie keinen "Besitz" an der speicherinternen Struktur einer Klasse hat, sondern lediglich einige neue Methoden zuordnet. Um die Eigenschaftssynthese vollständig zu unterstützen, müsste sie den Speicher der Klasse in irgendeiner Weise verändern
Die Lösung? Entweder Sie fügen die @synthesize-Anweisungen in Ihren @implementation-Hauptblock ein, oder Sie implementieren Ihre eigenen Accessors direkt innerhalb der Kategorie @implementation.