gpt4 book ai didi

objective-c - 通过 Objective-C 中的类别有条件地覆盖系统方法?

转载 作者:太空狗 更新时间:2023-10-30 03:36:22 27 4
gpt4 key购买 nike

有没有办法仅在系统中尚未定义方法时提供方法实现(与框架定义的方法具有完全相同的名称)?例如,方法 [NSSomeClass someMethod:] 仅存在于 Mac OS X 10.6 中,如果我的应用程序在 10.5 中运行,我将在类别中提供该方法的定义。但是当应用程序在 10.6 中运行时,我希望运行操作系统提供的方法。

背景:我正在创建一个同时针对 10.5 和 10.6 的应用。问题是我最近意识到方法 +[NSSortDescriptor sortDescriptorWithKey:ascending:] 只存在于 10.6 中,我的代码已经被该方法调用弄乱了。我可以为它提供一个默认实现(因为这次我自己实现它并不太困难),但我希望只要我的应用程序在 10.6 上运行,就会调用“本地”实现。此外,如果我将来遇到类似的问题(使用更难自己实现的方法),我可能无法逃避提供单行替换。

这个问题有点类似于Override a method via ObjC Category and call the default implementation?但不同之处在于,我只想在系统还没有实现时提供实现。

谢谢。

最佳答案

我会将类别中的 +[NSSortDescriptor sortDescriptorWithKey:ascending:] 编译成单独的包。然后在 main 的最开始,检查 NSSortDescriptor 类是否有 sortDescriptorWithKey:ascending: 方法和 respondsToSelector:。如果它没有实现(即你在 < 10.6 上运行),那么用 -[NSBundle loadAndReturnError:] 加载包。

这样,您将在 10.6 上运行操作系统提供的方法,并在 10.5 上运行您的实现。

关于objective-c - 通过 Objective-C 中的类别有条件地覆盖系统方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2470763/

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