gpt4 book ai didi

objective-c - 为什么 [ @""class] != NSClassFromString(NSStringFromClass([ @""class])) 在 OS X 上?

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

if([@"" class] == NSClassFromString(NSStringFromClass([@"" class])))
printf("foo");
else
printf("bar");

iOS 上的输出:foo

OS X 上的输出:bar

为什么这在 OS X 上表现得那么奇怪?

最佳答案

有趣的问题。下面指出评论中提到的一些事情:

Class c1 = [@"" class];
Class c2 = NSClassFromString(NSStringFromClass([@"" class]));

// The names are the same under iOS and OS X
NSLog(@"c1: '%@', c2: '%@'", c1, c2);
// The pointers are the same under iOS but different under OS X
NSLog(@"*c1: '%p', *c2: '%p'", c1, c2);

if (c1 == c2) {
NSLog(@"== equal"); // iOS
} else {
NSLog(@"== not equal"); // OS X
}

if ([c1 isEqual:c2]) {
NSLog(@"isEqual: equal"); // iOS
} else {
NSLog(@"isEqual: not equal"); // OS X
}

const char *n1 = class_getName(c1);
const char *n2 = class_getName(c2);
if (strcmp(n1, n2) == 0) {
NSLog(@"name equal"); // Both iOS and OS X
} else {
NSLog(@"name not equal");
}

在 Mac (OS X 10.7.5) 上:

2013-05-07 12:35:45.249 Test[27483:303] c1: '_NSCFConstantString', c2: '_NSCFConstantString'
2013-05-07 12:40:06.673 Test[27542:303] *c1: '0x7fff7d2bd740', *c2: '0x7fff7d28ae48'
2013-05-07 12:35:45.250 Test[27483:303] == not equal
2013-05-07 12:35:45.251 Test[27483:303] isEqual: not equal
2013-05-07 12:35:45.251 Test[27483:303] name equal

在 iOS (6.1) 上:

2013-05-07 12:38:11.816 Test[27516:11303] c1: '_NSCFConstantString', c2: '_NSCFConstantString'
2013-05-07 12:41:01.319 Test[27557:11303] *c1: '0x1db88f8', *c2: '0x1db88f8'
2013-05-07 12:38:11.816 Test[27516:11303] == equal
2013-05-07 12:38:11.816 Test[27516:11303] isEqual: equal
2013-05-07 12:38:11.816 Test[27516:11303] name equal

关键区别似乎是在 iOS 下,两个 Class 值是同一个对象,但在 OS X 下它们是两个不同的对象。

因此,使用 ==isEqual: 比较两个 Class 值似乎是不安全的,至少在 OS X 下是这样。我找不到任何函数来比较两个 Class 值,因此使用 class_getName 似乎是最好的选择。

关于objective-c - 为什么 [ @""class] != NSClassFromString(NSStringFromClass([ @""class])) 在 OS X 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16424298/

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