我正在 try catch /覆盖在我无权访问的对象中调用的某些方法。我希望能够子类化在系统对象中实例化的对象。
例如,当我实例化一个 UIWebView 时,它在内部实例化了一个 UIScrollView。我希望能够对 UIScrollView 进行子类化,这样我就可以通过对其进行子类化来修改其行为的某些方面。这可能吗?
我一直在尝试通过使用一个类别 @implementation UIScrollView (MyScrollView) 来做到这一点,然后覆盖 + alloc,并返回我自己的对象,它是 UIScrollView 的一个子类。但是,我遇到了一些问题。基本上,我似乎无法达到原来的 [UIScrollView alloc] 方法。也许我可以实现自己的 + alloc 方法来复制 [NSObject alloc] 行为?
有没有更简单的方法来做到这一点?我目前的做法有什么问题?
最后,这样做会通过 Apple 的审核流程吗?我不会调用任何未记录的内容。
最佳答案
类别的问题是,它们不允许适当的覆盖,因为您将无法再访问原始方法。
要实现这样的(请原谅我的法语)肮脏 技巧,您可以尝试 MethodSwizzling .作为最后的手段,这有时很有值(value)。我过去主要将它用于调试,也用于逆向工程。
对于您关于 Apple 审批流程的问题,我猜想您在以如此激进的方式更改 UIWebView 的默认实现时遇到麻烦的可能性非常高。
关于objective-c - 捕获 Objective C 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6035021/