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

前端之家收集整理的这篇文章主要介绍了通过Objective-C中的类别有条件地覆盖系统方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法在系统中尚未定义方法时提供方法实现(与框架定义的方法具有完全相同的名称)?例如,方法[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将您的实现绑定到该选择器(如果该类尚未拥有它).

猜你在找的C&C++相关文章