【发布时间】:2011-08-27 11:03:35
【问题描述】:
我正在尝试捕获/覆盖在我无法访问的对象中调用的某些方法。我希望能够对在系统对象中实例化的对象进行子类化。
例如,当我实例化一个 UIWebView 时,它会在内部实例化一个 UIScrollView。我希望能够对该 UIScrollView 进行子类化,这样我就可以通过对其进行子类化来修改其行为的某些方面。这可能吗?
我一直在尝试通过使用一个类别来做到这一点,@implementation UIScrollView (MyScrollView),然后覆盖 + alloc,并返回我自己的对象,它是 UIScrollView 的子类。但是,我遇到了一些问题。基本上,我似乎无法达到原来的 [UIScrollView alloc] 方法。也许我可以实现我自己的 + alloc 方法来复制 [NSObject alloc] 行为?
有没有更简单的方法来做到这一点?我目前的方法有什么问题?
最后,这样做会通过 Apple 的审核流程吗?我没有打电话给任何无证的东西。
【问题讨论】:
-
您添加到类别中的方法将替换现有的同名方法;因此,您将无法访问“原始方法”。
-
是的,我已经收集到了。多么烦人。有没有一种直接的方法来为我的子类对象实现 + alloc 方法?这实际上只是一个内存管理调用,对吧?话又说回来,我如何准确地告诉运行时这是哪种类型的对象??
-
如果您对私人课程的内幕感到困惑,这通常会受到强烈反对(并可能导致拒绝——您必须向 ADC 寻求明确的答案)。但是,实际上,您不想这样做。保证会导致神秘的崩溃、令人头疼的维护问题,以及在任何给定的软件更新后您的应用是否能正常工作的赌注。
标签: objective-c ios nsobject