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

通过Objective-C中的类别有条件地覆盖系统方法?,第1张

概述有没有办法在系统中尚未定义方法时提供方法实现(与框架定义的方法具有完全相同的名称)?例如,方法[NSSomeClass someMethod:]仅存在于Mac OS X 10.6中,如果我的应用程序在10.5中运行,我将在类别中提供该方法的定义.但是当应用程序在10.6中运行时,我希望运行OS提供的方法. 背景:我正在创建一个针对10.5和10.6的应用程序.问题是我最近意识到方法[NSSortD 有没有办法在系统中尚未定义方法时提供方法实现(与框架定义的方法具有完全相同的名称)?例如,方法[NSSomeClass someMethod:]仅存在于Mac OS X 10.6中,如果我的应用程序在10.5中运行,我将在类别中提供该方法的定义.但是当应用程序在10.6中运行时,我希望运行OS提供的方法.

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

这个问题与Override a method via ObjC Category and call the default implementation?模糊地相似,但不同之处在于我只想在系统还没有实现时才提供实现.

谢谢.

解决方法 是的,这是可能的.由于你的目标是10.5我假设你正在使用ObjC2运行时,这使得它非常简单.

Objective-C Runtime Reference拥有您需要的所有方法.具体来说,您可以使用class_getClassMethod或class_getInstanceMethod来查看该方法是否已存在,然后使用class_addMethod将您的实现绑定到该选择器(如果该类尚未拥有它).

总结

以上是内存溢出为你收集整理的通过Objective-C中的类别有条件地覆盖系统方法?全部内容,希望文章能够帮你解决通过Objective-C中的类别有条件地覆盖系统方法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1240711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存