У меня есть категория на NSObject, которая должна так много работать. Когда я вызываю его на объект, я хотел бы переопределить его метод dealloc, чтобы сделать некоторые очистки.
Я хотел сделать это, используя метод swizzling, но не мог понять, как это сделать. Единственные примеры, которые я нашел, - это о том, как заменить реализацию метода для всего класса (в моем случае он будет переопределять dealloc для ВСЕХ NSObjects, чего я не хочу).
Я хочу переопределить метод dealloc конкретных экземпляров NSObject.
@interface NSObject(MyCategory)
-(void)test;
@end
@implementation NSObject(MyCategory)
-(void)newDealloc
{
// do some cleanup here
[self dealloc]; // call actual dealloc method
}
-(void)test
{
IMP orig=[self methodForSelector:@selector(dealloc)];
IMP repl=[self methodForSelector:@selector(newDealloc)];
if (...) // 'test' might be called several times, this replacement should happen only on the first call
{
method_exchangeImplementations(..., ...);
}
}
@end