在App Store上是否有任何关于方法swizzling合法/非法的最新信息?
我能找到的唯一数据点是不久前Three20框架的调整,它始于以下通知:
您的应用程序xxx当前发布到应用商店,正在使用method_exchangeImplementations以交换Apple的实现提供了带有您自己实现的API。因为即将到来更改时,应用程序中的此行为可能会导致崩溃或iPhone OS 4.0上的用户数据丢失。
xxx使用method_exchangeImplementations交换实现的方法ttdealloc。它还交换方法popViewControllerAnimated:的实现方法popViewControllerAnimate2:。
请立即解决此问题,并将您的新二进制文件上传到iTunes Connect。如果我们认为这样做是谨慎的或必要的。
当我四处搜索时,我能找到的每一个关于swizzing和应用商店的最近对话似乎都提到了同样的Three20事件。通知似乎很具体,我想知道这个问题是Three20所做更改的特定更改问题,还是method_exchangeImplementations被普遍禁止。
关于是否允许这种做法,还有其他数据点吗?商店里有没有使用swizzling的应用程序开发人员?
谢谢!
AFNetworking是一个广泛用于网络请求的lib(IMO),使用swizzling至少1.3.4版本来支持类方法中的其他可接受状态代码和内容类型。
所以这样做似乎是合法的。
注意:他们使用了class_replaceMethod,而不是method_exchangeImplementations。
通常,swizzling是为了调试,看看什么时候调用了特定的方法,或者在你不能对某个东西进行子类化或使用类别的情况下。如果你在将应用程序放在应用商店上的计划不紧,我想你可以试着使用swizzling方法发送应用程序,看看它是否被接受。并不是所有的应用程序都以相同的方式进行审查,有时这真的取决于审查者。