class_addmethod和Public API

时间:2012-07-23 09:17:10

标签: objective-c runtime

我正在开发一个游戏项目,并希望使用对象组合模式给我很大的灵活性。我目前覆盖了消息转发方法,以便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。

感谢阅读!

劳伦斯

1 个答案:

答案 0 :(得分:1)

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