gpt4 book ai didi

objective-c - 将 NSString 与常量进行比较 #define string : isEqualToString or ==?

转载 作者:行者123 更新时间:2023-11-28 18:24:23 24 4
gpt4 key购买 nike

如果我需要将 NSString 属性与 #define 定义的常量字符串进行比较,我可以使用双等号吗?

我知道 isEqualToString: 会起作用,但只是想知道 == 是否也起作用,例如以下两种情况:

场景 1:

#define BLA @"BLA"
NSString *str1 = BLA;
BOOL equal = self.someStr == BLA;

场景 2:

#define BLA @"BLA"
NSString *str1 = @"BLA";
BOOL equal = self.someStr == BLA;

它们是一样的吗?

最佳答案

==isEqualToString: 永远不会相同。虽然 == 有时可能表现得好像它正在检查字符串中的实际字符,但这完全是偶然的。 LLVM 编译器对字符串常量进行了大量优化,但 LLVM 优化是一个实现细节,随时可能发生变化。

isEqualToString: - 比较字符串中的单个字符。== - 直接比较指针。只有当两个 NSString 对象实际上是同一内存位置的同一实例时,才会返回 true。

编辑:#define 语句在编译器运行之前进行评估(它们在预处理器中进行评估)。 #define 语句进行直接向上搜索和替换,因此用相同的东西代替 #define 是完全相同的东西。

关于objective-c - 将 NSString 与常量进行比较 #define string : isEqualToString or ==?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13521715/

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