【发布时间】:2012-12-17 19:05:36
【问题描述】:
我需要一个类,它包含 NSArray 的所有方法,它们的行为方式相同,但修改了 2 个方法。
我想在我的自定义类中重写这两个方法:
1) countByEnumeratingWithState:objects:count:
2) objectAtIndex:
经过数小时的研究,我认为没有任何合理的方法可以做到这一点,因为:
我不想使用类别,因为并非所有 NSArray 实例都应该具有修改后的行为。 (加上会引发警告)
我不想重写所有初始化程序以及所有 arrayWith... 方法 + 原始方法 + 实现了我自己的存储(因为这个功能已经在 Cocoa 中实现了,对吧?我为什么要重新 -实现已经存在的类的所有功能?)
-
如果我让我的自定义类继承 NSObject 并使用 NSArray 作为 ivar 中的存储,那么在 Xcode 中编程时所有 NSArray 的方法都不可用(即使我可以将它们转发到 NSArray ivar)
我通过使用 method_setImplementation(...) 按需覆盖了一些方法实现,但仍然无法找到一种在运行时动态创建类的方法,然后该类将具有自定义实现我提到的两种方法。
期待你的想法!谢谢
【问题讨论】:
-
实际上不是骗子。另一个问题并没有真正回答 OP 的问题。
-
我想我只是创建一个包装类。用resolveInstanceMethod、forwardingTargetForSelector等应该可以盲转大部分调用。
-
回答OP的问题;您只需要重写主要方法即可创建子类。在主@interface 中声明的那些)。基类上的所有其他方法都是根据这些方法实现的。覆盖您需要的自定义行为和/或优化之外的内容。代理包装器是可能的,但相比之下真的很慢。
-
@bbum -- 您必须阅读 NSArray 的详细信息 -- “覆盖的方法”包括一个非常令人生畏的函数列表,具体取决于您的阅读方式。
-
一篇有用的文章cocoawithlove.com/2008/12/…
标签: objective-c ios nsarray