Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Cocoa,Nproxy,如何接管对象中的方法?_Objective C_Cocoa_Nsproxy - Fatal编程技术网

Objective c Cocoa,Nproxy,如何接管对象中的方法?

Objective c Cocoa,Nproxy,如何接管对象中的方法?,objective-c,cocoa,nsproxy,Objective C,Cocoa,Nsproxy,我需要用自己的实现替换对象中的方法。比如说, Person *p; // some object NSMutableArray *array = [NSMutableArray array]; [array addObject: p]; 如何用自己的方法替换addObject 换句话说,是否有一种方法可以用另一种实现替换特定对象的addObject:实现 我一直在玩NSProxy,但不知道该怎么办 我们将非常感谢您的帮助 感谢使该对象成为具有不同方法实现的不同类的实例。您可以使用类别覆盖NSM

我需要用自己的实现替换对象中的方法。比如说,

Person *p; // some object
NSMutableArray *array = [NSMutableArray array];
[array addObject: p];
如何用自己的方法替换addObject

换句话说,是否有一种方法可以用另一种实现替换特定对象的
addObject:
实现

我一直在玩
NSProxy
,但不知道该怎么办

我们将非常感谢您的帮助


感谢

使该对象成为具有不同方法实现的不同类的实例。

您可以使用类别覆盖
NSMutableArray的
:addObject
方法。有关更多信息,请参阅(第11节)。

您可以使用方法swizzling方法替换运行时方法。实际上有一个问题与您的一样,因此,我认为finsl解决方案也应该适用于您-

不建议覆盖类别中的方法,而且这将取代
NSMutableArray
的所有实例的方法,如果我需要接管整个对象,同时能够在将来的任何时候撤消此替换,该怎么办?此外,我需要此更改对具有此对象引用的其他对象完全透明。正如jbrennan所指出的,我需要为一些特定的对象这样做。这部分是正确的,但是,对其他引用这个对象的对象会发生什么呢?它不创建悬挂的引用吗?此更改对其他对象应该是透明的。您的类应该是
NSMutableArray
的子类。它对其他对象是透明的,可以像对待任何其他可变数组一样对待您的
CustomizedArray
。根据您的实现,addObject的行为将稍有不同。@noa:子类化NSMutableArray并不是那么简单。如果这样做,您必须重新实现该类的全部功能。@noa:NSMutableArray是NSArray类群集的一部分。它主要作为一个接口存在。您使用的所有NSArray和NSMutableArray实际上都是私有NSMutableArray子类的实例。如果你是NSMutableArray的子类,你不会得到任何实际的功能,因为它都在NSFarray中。明白了。听起来你需要重新实现它,或者代理它。谢谢