Если вы хотите регистрировать отправку сообщений с вашего кода приложения, то -forwardingTargetForSelector: tip является частью решения.
Оберните объект:
@interface Interceptor : NSObject
@property (nonatomic, retain) id interceptedTarget;
@end
@implementation Interceptor
@synthesize interceptedTarget=_interceptedTarget;
- (void)dealloc {
[_interceptedTarget release];
[super dealloc];
}
- (id)forwardingTargetForSelector:(SEL)aSelector {
NSLog(@"Intercepting %@", NSStringFromSelector(aSelector));
return self.interceptedTarget;
}
@end
Теперь сделать что-то вроде этого:
Interceptor *i = [[[Interceptor alloc] init] autorelease];
NSFetchedResultsController *controller = [self setupFetchedResultsController];
i.interceptedTarget = controller;
controller = (NSFetchedResultsController *)i;
и вы будете иметь журнал сообщений посылает. Обратите внимание, что отправления, отправленные из перехваченного объекта, не будут перехватываться, поскольку они будут отправлены с использованием указателя исходного объекта.
Вы, вероятно, имели в виду @selector (release), а не @selector (dealloc) –
Да, я имел в виду @selector (release). Это я мило и вставляю это из некоторого кода, который swizzled dealloc, но не хотел показывать это в примере, потому что есть некоторые особые проблемы с этим. Исправлена. –
@LouisGerbarg Можете ли вы разместить ссылку на исходный источник, который swizzled релиз? – funroll