iOS DidMoveToWindow无限循环

我正在研究iOS NUI框架的源代码。 我发现了下面这行代码,但是我不知道它是如何工作的

- (void)override_didMoveToWindow { if (!self.isNUIApplied) { [self applyNUI]; } [self override_didMoveToWindow]; } 

只是为了清楚起见,他们用这个方法debugging了DidMoveToWindow的原始实现,以便在运行时应用类/样式。 令我困惑的是上面的函数从来没有造成任何死循环。

这可能有助于: http : //darkdust.net/writings/objective-c/method-swizzling

实际上是用原来的方式交换的。 所以当原来的方法被调用时,调用方法已经交换了实现。 并调用“swizzled方法”override_didMoveToWindow方法将调用原始函数。

它看起来不是一个循环,因为它看起来作者假定[self applyNUI]总是改变状态,以使self.isNUIApplied变成== YES