gpt4 book ai didi

ios - Objective c 中方法调配和类别之间的区别

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:57:46 25 4
gpt4 key购买 nike

我只是了解在 obj c Method Swizzling 中完成的方法调配和 dangers of using method swizzling并且忍不住比较了使用类别进行方法调配和覆盖方法实现之间的比较。它们都有助于覆盖预定义框架方法的功能。那么两者有什么区别或者可以互换使用吗?

最佳答案

主要区别在于 Objective C 阻止您从类别覆盖中调用原始实现。这是因为 Objective-C 的 super 调用从父类(super class)开始,而类别覆盖同一类级别的方法。

另一方面,方法调配让您也可以保留对原始实现的引用,以便您可以从实现内部调用它。例如,在您第一个链接的文章中,作者写道:

- (void) logged_viewDidAppear:(BOOL)animated {
[self logged_viewDidAppear:animated];
NSLog(@"logged view did appear for %@", [self class]);
}

第二行调用了 logged_viewDidAppear: 方法,这看起来像是对自身的无条件调用,应该会导致无限递归。然而,情况并非如此:在调配之后,由于方法调配的工作方式,此调用被转换为对原始 viewDidAppear: 的调用。

相比之下,覆盖类别中的方法不会让您访问您正在覆盖的方法的逻辑。它允许您替换逻辑,但不允许您扩展它。

关于ios - Objective c 中方法调配和类别之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30695895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com