我閱讀了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」。我的話是正確的嗎?