我使用 NSProxy 来模拟一个类,并希望挂钩该类的所有调用。但是只有类外调用的方法才被钩住,类内没有调用的方法。下面是我的代码:
在我的AppDelegate.m中,TBClassMock是NSProxy的子类
TBClassMock *mock = [[TBClassMock alloc] init];
TBTestClass *foo = [[TBTestClass alloc] init];
mock.target = foo;
foo = mock;
[foo outsideCalled];
在我的TBTestClass.m
- (void)outsideCalled
{
[self insideCalled];
}
- (void)insideCalled
{
}
在我的TBClassMock.m
- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector
{
NSLog(@"Signature: %@", NSStringFromSelector(selector));
return [self.target methodSignatureForSelector:selector];
}
-(void)forwardInvocation:(NSInvocation*)anInvocation
{
//... Do other things
[anInvocation invokeWithTarget:self.target];
}
然后我可以记录 的调用[foo outsideCalled]
,但不能记录 的调用[self insideCalled]
。
我的目标是在类的所有调用中做一些事情//... Do other things
,这种方式似乎失败了。关于这个和任何其他方法来实现我的要求的任何解释?我只是不想使用这个类的所有方法,method_exchangeImplementations
因为我认为这太挑剔而且不是一个好方法。