objective-c - Mountain Lion 中的条件类别

标签 objective-c macos categories osx-mountain-lion nscolor

山狮介绍 new APIs ,其中一些我们已经在我们的项目中实现为类别。

例如,我们有一个类别NSColor+CGColorAdditions,它为NSColor 实现了CGColorcolorWithCGColor:。这些方法已添加到 Mountain Lion 中。

理想情况下,如果客户端操作系统早于 Mountain Lion,我们希望使用这些类别,如果是 Mountain Lion,则不使用它们。我们应该怎么做?或者有更好的选择吗?

最佳答案

NSColor *_NSColor_colorWithCGColor_(Class self, SEL cmd, CGColorRef cgColor)
{
    // make an NSColor outta `cgColor` and return it
    return nsColor;
}

// inside some initialization code

if ([[NSColor class] respondsToSelector:@selector(colorWithCGColor:)]) {
    // on ML, don't do anything
} else {
    // older system, add your own category
    class_addMethod(objc_getMetaClass("NSColor"), @selector(colorWithCGColor:), (IMP)_NSColor_colorWithCGColor_, "@@:@");
}

关于objective-c - Mountain Lion 中的条件类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11950173/

相关文章:

python - Groupby 和值计数类别

根据元素的大小将元素分成几类的算法

database - 允许一个类别有多个父类有意义吗?有其他选择吗?

ios - Safari 扩展上的应用程序传输安全

ios - SceneKit ios 中的立方体的所有侧面都没有发光

iphone - 在 Objective-C 中获取 id 的字符串表示

objective-c - 全局应用程序监控 macos/cocoa/objective-c

macos - 在 Cocoa OS X 应用程序中,如何在启动时打开两个窗口?

ios - 如何理解选择了哪个 UITableViewCell

iphone - 具有数千个对象的 NSDictionary 会很慢吗?