gpt4 book ai didi

cocoa - 是否值得使用 ivar 而不是 Gestalt(gestaltSystemVersion, (SInt32*)&systemVersion) ?

转载 作者:行者123 更新时间:2023-12-03 16:29:37 25 4
gpt4 key购买 nike

我想支持 OSX 10.6 和 10.7,所以我有条件地做一些事情。其中一些在很短的时间内完成了多次,所以我想知道使用 ivar 来告诉我 systemVersion 而不是这样做是否有好处

SInt32 systemVersion
Gestalt(gestaltSystemVersion, (SInt32*)&systemVersion);

将使用:

if (systemVersion >= 0x1070){ //OSX 10.7
}else{//OSX 10.6
}

我过去从未使用过格式塔。格式塔是在做某种困难的事情还是每次调用它都很便宜?

最佳答案

Gestalt 非常便宜,尤其是与运行单独的 sw_vers -productVersion 来弄清楚这一点相比。也就是说,将其作为静态变量缓存在实现文件中肯定不会有什么坏处。你可以这样做:

MDObject.m:

enum {
MDUndeterminedVersion = 0,
MDTiger = 0x1040,
MDLeopard = 0x1050,
MDSnowLeopard = 0x1060,
MDLion = 0x1070,
MDMountainLion = 0x1080,
MDMavericks = 0x1090,
MDUnknownVersion = 0x1100 // ??
};

static SInt32 MDSystemVersion = MDUndeterminedVersion;

@implementation

+ (void)initialize {
if (MDSystemVersion == MDUndeterminedVersion) {
SInt32 MDFullSystemVersion = 0;
Gestalt(gestaltSystemVersion, &MDFullSystemVersion);
MDSystemVersion = MDFullSystemVersion & 0xfffffff0;
}
}

- (void)someMethod {
if (MDSystemVersion >= MDLion) {

} else {

}
}

@end

+initialize 在创建该类的实例之前被调用一次,并且(通常)仅调用一次。因此,它提供了一个方便的地方来确保在实际使用任何对象之前正确确定静态变量。

关于cocoa - 是否值得使用 ivar 而不是 Gestalt(gestaltSystemVersion, (SInt32*)&systemVersion) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6907065/

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