मुझे पता है कि कई तरीके अपने सुपर वर्ग विधि कॉल करने की जरूरत है और कुछ तरीकों न की जरूरत है,करता विधि [लोड] [सुपर लोड]
मैं के बारे में विधि swizzling.It के दशक में प्रारंभ के बारे में sth देख रहा हूँ कॉल करने की आवश्यकता लोड विधि, और ट्यूटोरियल में [super load]
नहीं है।
मुझे आश्चर्य है कि यह गलत है या [super load]
पर कॉल करने की आवश्यकता नहीं है।
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class class = [self class];
// When swizzling a class method, use the following:
// Class class = object_getClass((id)self);
SEL originalSelector = @selector(pushViewController:animated:);
SEL swizzledSelector = @selector(flbs_pushViewController:animated:);
Method originalMethod = class_getInstanceMethod(class, originalSelector);
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
BOOL didAddMethod =
class_addMethod(class,
originalSelector,
method_getImplementation(swizzledMethod),
method_getTypeEncoding(swizzledMethod));
if (didAddMethod) {
class_replaceMethod(class,
swizzledSelector,
method_getImplementation(originalMethod),
method_getTypeEncoding(originalMethod));
} else {
method_exchangeImplementations(originalMethod, swizzledMethod);
}
});
}
#pragma mark - Method Swizzling
- (void)flbs_pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
dispatch_async(dispatch_get_main_queue(), ^{
[self flbs_pushViewController:viewController animated:animated];
});
NSLog(@"flbs_pushViewController");
}
वैसे, इस विधि का उपयोग नेविगेशन भ्रष्टाचार को ठीक करने के लिए किया जाता है।
मैं कभी-कभी समस्या को फिर से प्रकट करने के लिए हुआ, और मैंने इसे डीबगर्ज किया, मुझे लगता है कि यह थ्रेड के बारे में है। इसलिए मैं सिस्टम विधि में sth जोड़ने के लिए यह swizzling बनाते हैं।
यदि आप नेविगेशन भ्रष्टाचार की समस्या या इस विधि को तेज करने के बारे में बता सकते हैं, तो मैं भी इसकी सराहना करता हूं।
[सुपर लोड] को कॉल करने का सर्वोत्तम अभ्यास इसलिए सभी घटकों को घटना होने का संचार मिलता है। – nikhil84