У меня есть категория 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