2015-09-07 43 views
1

我阅读了article about "Method Swizzling in Objective-C"。在本文中,“方法Swizzing”的含义是交换两种方法的实现。样品是如下所示:Objective-C中的方法Swizzling

- (void) logged_viewDidAppear:(BOOL)animated { 
    [self logged_viewDidAppear:animated]; 
    NSLog(@"logged view did appear for %@", [self class]); 
} 
+ (void)load { 
    static dispatch_once_t once_token; 
    dispatch_once(&once_token, ^{ 
     SEL viewWillAppearSelector = @selector(viewDidAppear:); 
     SEL viewWillAppearLoggerSelector = @selector(logged_viewDidAppear:); 
     Method originalMethod = class_getInstanceMethod(self, viewWillAppearSelector); 
     Method extendedMethod = class_getInstanceMethod(self, viewWillAppearLoggerSelector); 
     method_exchangeImplementations(originalMethod, extendedMethod); 
    }); 
} 
- (void) logged_viewDidAppear:(BOOL)animated { 
    [self logged_viewDidAppear:animated]; 
    NSLog(@"logged view did appear for %@", [self class]); 
} 

在这篇文章中,一个句子是

它可能看起来这这种方法使得对自身的无意义的递归调用,但它实际上并不会那么做我们调整它之后。

但我不会因为这个声明很清楚,这是否意味着,当我们写的代码象下面这样:

[self viewDidAppear], 

,因为它的实现成为“logged_viewDidAppear”,所以程序转到方法“ logged_viewDidAppear“,在该方法中,我们可以看到,第一行是[self logged_viewDidAppear:animated];出于同样的原因,该方法变成“viewDidAppear”。我的话是正确的吗?

回答