0

我正在开发一个游戏项目,并希望使用对象组合模式来给我很大的灵活性。我目前重写了消息转发方法,以便 Composite 可以调用其组件的方法。

唯一的缺点是 -forwardingTargetForSelector: 仅在只有一个目标时才有效。如果我有一个包含两个具有相同选择器的组件的 Composite,那么我将不得不求助于使用(慢得多)-forwardInvocation 方法并在两个目标上执行 NSInvocation。

通过阅读几本关于高级 Objective-C 和运行时参考的书籍,我似乎可以通过动态创建一个在子组件类中调用 IMP 的实现来转发消息。我会使用运行时方法 class_addmethod 来执行此操作。

我的问题是,有谁知道 Apple 是否认为这是私有 API 并因此违反 App Store 规则?有没有人在通过审核的应用中使用过 class_addmethod ?

众所周知,商店中不允许进行方法调配,但这并不完全相同。一个典型的例子是在外观 API 可用之前在 UINavigationBar 上调配 -drawRect:。这将向我自己的对象添加方法,而不是弄乱 Apple 自己的 API。

谢谢阅读!

劳伦斯

4

1 回答 1

1

从我读过的内容来看,只要您不使用 Apple 提供的类来更改功能,您应该没问题。Objective-C 运行时不是私有 API,所以如果这一切都发生在您自己的代码上,那么您应该可以这样做。

于 2012-07-23T09:47:04.757 回答