Я хотел бы знать, как узнать, какие из этих методов являются конструкторами, когда я пишу контейнер IOC. Я хотел бы определить конструкторы и их типы параметров.
Короче говоря, вы не можете. Или, по крайней мере, вы обнаружите, что на этом пути лежит безумие.
Во-первых, в Objective-C нет конструкторов. У него есть инициализаторы, иногда много, и — для правильно написанного класса — только один из них является назначенным инициализатором. Невозможно идентифицировать назначенный инициализатор во время компиляции или во время выполнения.
Как мне использовать это с методом * и без экземпляра члена класса?
Вы не знаете. Сначала вы выделяете экземпляр класса, затем инициализируете экземпляр.
В целом, этот уровень абстракции просто не реализован в Objective-C за пределами академических исследований. Это можно сделать, но обычно этого избегают из-за хрупкости результирующего решения и комка адского кода, который пытается динамически поддерживать лежащий в основе C ABI (посмотрите исходный код на libffi).
Если вы хотите пойти по этому пути, то вам гораздо лучше либо определить собственный абстрактный класс, подклассом которого будут все ваши контейнеры, который может обеспечить логику привязки к классу, стоящему за ним.
Или используйте протоколы; то есть класс может реализовать протокол IOCBean, и одним из методов будет initIOCGoop
, который является назначенным инициализатором goo.
Выполнение этого в общем для всех классов будет изобиловать хрупкостью, особыми случаями и потребует гигантского беспорядка кода, который будет трудно поддерживать с течением времени.
person
bbum
schedule
07.08.2011