के तहत एक बनाए रखा ऑब्जेक्ट प्रदान उदाहरण के लिए, की सुविधा देता है एआरसी के अंतर्गत निम्नलिखित कोड पर विचार करें:Swizzling तरीकों, कि परोक्ष एआरसी
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
@implementation NSDate (MyEvilHack)
+ (void)load {
Method originalMethod = class_getInstanceMethod(self, @selector(copyWithZone:));
Method newMethod = class_getInstanceMethod(self, @selector(myCopyWithZone:));
method_exchangeImplementations(originalMethod, newMethod);
}
- (id)myCopyWithZone:(NSZone *)zone {
id result = [self myCopyWithZone:zone];
// do customization
return result;
}
@end
इस कोड में, मूल copyWithZone:
विधि परोक्ष है एक बनाए रखा वस्तु देता है, क्योंकि यह copy
के अंतर्गत आता है विधि परिवार लेकिन मेरा myCopyWithZone:
नहीं है।
मुझे दुर्घटना की उम्मीद है, लेकिन ऐसा लगता है कि यह कोड सामान्य रूप से काम करता है। बेशक, मैं भ्रम से बचने के लिए अपनी विधि का नाम बदल सकता हूं। लेकिन मैं उत्सुक हूं कि हुड के नीचे वास्तव में क्या होता है?