मेरे पास एनएसओब्जेक्ट पर एक श्रेणी है जो कुछ सामानों को मानती है। जब मैं इसे किसी ऑब्जेक्ट पर कॉल करता हूं, तो मैं कुछ क्लीनअप करने के लिए अपनी डेलोक विधि को ओवरराइड करना चाहता हूं।एक उदाहरण को स्विजलिंग, कक्षा
मैं इसे विधि स्विजलिंग का उपयोग करके करना चाहता था, लेकिन यह पता नहीं लगा सका। मैंने पाया है कि एकमात्र उदाहरण पूरे वर्ग के लिए विधि कार्यान्वयन को प्रतिस्थापित करने के तरीके पर हैं (मेरे मामले में, यह सभी एनएसओब्जेक्ट्स के लिए डेलोक ओवरराइड करेगा - जो मैं नहीं चाहता)।
मैं 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
उत्तर के लिए धन्यवाद। तो मूल रूप से, प्रत्येक कॉल के लिए - मैं एक नई वस्तु आवंटित करता हूं (जिसे मैं कार्यान्वित करता हूं) और इसे संबंधित ऑब्जेक्ट के रूप में सेट करता हूं और मैं अपने डेलोक के अंदर सफाई करता हूं? –
बिल्कुल। उस ब्लॉग पोस्ट को देखें, यहां तक कि 'NSObject' पर भी एक अच्छी श्रेणी है जो कि आप किसी ऑब्जेक्ट के डेलोक के दौरान कॉल करने के लिए ब्लॉक पंजीकृत करते हैं। – Sven