我正在开发一个游戏项目,并希望使用对象组合模式给我很大的灵活性。我目前覆盖了消息转发方法,以便Composite可以调用其Components的方法。
唯一的缺点是-forwardingTargetForSelector:仅在只有一个目标时才有效。如果我有一个具有两个具有相同选择器的组件的Composite,那么我将不得不求助于使用(慢得多)-forwardInvocation方法并在两个目标上执行NSInvocation。
通过阅读一些关于高级Objective-C和Runtime引用的书籍,似乎我可以通过动态创建一个将在子组件类中调用IMP的实现来转发消息。我会使用Runtime方法class_addmethod来做到这一点。
我的问题是,有没有人知道Apple是否认为这是私有API,因此违反App Store规则?有人在已通过审核的应用中使用了class_addmethod吗?
众所周知,商店中不允许使用method swizzling,但这并不完全相同。一个典型的例子是在Appearance API可用之前,在UINavigationBar上调用-drawRect:。这将是我自己的对象添加方法,而不是弄乱Apple自己的API。
感谢阅读!
劳伦斯
答案 0 :(得分:1)
从我读过的内容来看,只要你没有调动Apple提供的类来改变功能,你应该没问题。 Objective-C运行时不是私有API,因此如果这一切都发生在您自己的代码上,那么您应该可以这样做。