我正在开发一个游戏项目,并希望使用对象组合模式来给我很大的灵活性。我目前重写了消息转发方法,以便 Composite 可以调用其组件的方法。
唯一的缺点是 -forwardingTargetForSelector: 仅在只有一个目标时才有效。如果我有一个包含两个具有相同选择器的组件的 Composite,那么我将不得不求助于使用(慢得多)-forwardInvocation 方法并在两个目标上执行 NSInvocation。
通过阅读几本关于高级 Objective-C 和运行时参考的书籍,我似乎可以通过动态创建一个在子组件类中调用 IMP 的实现来转发消息。我会使用运行时方法 class_addmethod 来执行此操作。
我的问题是,有谁知道 Apple 是否认为这是私有 API 并因此违反 App Store 规则?有没有人在通过审核的应用中使用过 class_addmethod ?
众所周知,商店中不允许进行方法调配,但这并不完全相同。一个典型的例子是在外观 API 可用之前在 UINavigationBar 上调配 -drawRect:。这将向我自己的对象添加方法,而不是弄乱 Apple 自己的 API。
谢谢阅读!
劳伦斯