Tôi có một danh mục trên NSObject có nghĩa vụ phải có một số nội dung. Khi tôi gọi nó trên một đối tượng, tôi muốn ghi đè lên phương thức dealloc của nó để làm một số dọn dẹp.Xáo trộn một cá thể đơn lẻ, không phải là một lớp
Tôi muốn làm điều đó bằng cách sử dụng phương pháp nổi loạn, nhưng không thể tìm ra cách. Các ví dụ duy nhất tôi đã tìm thấy là làm thế nào để thay thế việc thực hiện phương pháp cho toàn bộ lớp (trong trường hợp của tôi, nó sẽ ghi đè lên dealloc cho TẤT CẢ NSObjects - mà tôi không muốn).
Tôi muốn ghi đè phương thức dealloc của các phiên bản cụ thể của 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
Cảm ơn câu trả lời. Vì vậy, về cơ bản, cho mỗi cuộc gọi - tôi phân bổ một đối tượng mới (mà tôi thực hiện) và thiết lập nó như là đối tượng liên quan và tôi làm sạch bên trong dealloc của nó? –
Chính xác. Nhìn vào bài đăng trên blog đó, nó thậm chí còn có một danh mục tốt đẹp trên 'NSObject' cho phép bạn đăng ký các khối được gọi trong suốt quá trình dealloc của bất kỳ đối tượng nào. – Sven