2012-07-23 98 views
0

我正在開發一個遊戲項目,並希望使用對象組合模式給我很大的靈活性。我目前覆蓋消息轉發方法,以便Composite可以調用其組件的方法。class_addmethod和公共API

唯一的缺點就是-forwardingTargetForSelector:只有當只有一個目標時才起作用。如果我有一個具有相同選擇器的兩個組件的Composite,那麼我將不得不求助於使用(非常慢)-forwardInvocation方法並在兩個目標上執行NSInvocation。

通過閱讀關於高級Objective-C和Runtime引用的幾本書,我似乎可以通過動態創建一個將在子組件類中調用IMP的實現來轉發消息。我將使用運行時方法class_addmethod來完成此操作。

我的問題是,有誰知道蘋果是否認爲這是私人API,從而違反App Store規則?有沒有人在已通過審覈的應用中使用class_addmethod?

method swizzling在商店裏是不允許的,但這不是完全一樣的東西。一個典型的例子是在UINavigationBar上調用-drawRect:在Appearance API可用之前。這會將方法添加到我自己的對象中,而不是搞亂Apple自己的API。

感謝閱讀!

勞倫斯

回答

1

從我只要你不混寫蘋果提供的類改變閱讀功能,你應該罰款。 Objective-C運行時不是一個私有API,所以如果這一切都發生在你自己的代碼上,那麼你應該沒問題。