NSObject에 카테고리가 있으므로 물건이 필요합니다. 내가 객체를 호출 할 때 dealloc 메소드를 오버라이드하여 정리를하고 싶습니다.클래스가 아닌 단일 인스턴스 Swizzling
나는 방법을 사용하여 그것을하고 싶었지만 방법을 알 수 없었습니다. 내가 찾은 유일한 예는 전체 클래스의 메소드 구현을 대체하는 방법에 관한 것입니다. 제 경우에는 모든 NSObject에 대한 dealloc을 오버라이드합니다.
NSObject의 특정 인스턴스에 대한 dealloc 메소드를 무시하고 싶습니다.
@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
답변 해 주셔서 감사합니다. 그래서 기본적으로, 각 호출마다 - 나는 (구현하는) 새로운 객체를 할당하고 그것을 연관된 객체로 설정하고, 그 dealloc 내부에서 정리를 수행합니까? –
바로. 그 블로그 포스트를 보면 NSObject에 멋진 카테고리가있어서 어떤 객체의 dealloc 중에 호출 될 블록을 등록 할 수 있습니다. – Sven