class_addmethod и общедоступный API

Я разрабатываю игровой проект и хочу использовать шаблон композиции объектов, чтобы обеспечить большую гибкость. В настоящее время я переопределяю методы пересылки сообщений, чтобы Composite мог вызывать методы своих компонентов.

Единственным недостатком этого является то, что -forwardingTargetForSelector: работает только тогда, когда должна быть только одна цель. Если у меня есть Composite с двумя компонентами, которые имеют один и тот же селектор, мне придется прибегнуть к использованию (гораздо более медленного) метода -forwardInvocation и выполнить NSInvocation для обеих целей.

После прочтения нескольких книг по продвинутому справочному руководству по Objective-C и среде выполнения кажется, что я могу пересылать сообщения, динамически создавая реализацию, которая будет вызывать IMP в дочерних классах компонентов. Я бы использовал для этого метод class_addmethod времени выполнения.

Мой вопрос: кто-нибудь знает, считает ли Apple это частным API и, следовательно, нарушением правил App Store? Кто-нибудь использовал class_addmethod в приложениях, прошедших проверку?

Общеизвестно, что прокрутка методов не разрешена в магазине, но это не так. точно то же самое. Одним из типичных примеров было использование -drawRect: на UINavigationBar до того, как стал доступен Appearance API. Это будет добавление методов к моему собственному объекту, а не возня с собственным API Apple.

Спасибо за чтение!

Лоуренс


person Lawrence Lomax    schedule 23.07.2012    source источник


Ответы (1)


Из того, что я читал, если вы не используете классы, предоставленные Apple, для изменения функциональности, с вами все будет в порядке. Среда выполнения Objective-C не является частным API, поэтому, если все это происходит в вашем собственном коде, вы можете это сделать.

person lyptt    schedule 23.07.2012