hzx*_*zxu 0 objective-c nsstring ios
如果我需要将NSString属性与常量字符串define by进行比较#define,我可以使用双等号吗?
我知道这isEqualToString:会起作用,但只是想知道是否==也有效,比如以下两种情况:
场景1:
#define BLA @"BLA"
NSString *str1 = BLA;
BOOL equal = self.someStr == BLA;
Run Code Online (Sandbox Code Playgroud)
场景2:
#define BLA @"BLA"
NSString *str1 = @"BLA";
BOOL equal = self.someStr == BLA;
Run Code Online (Sandbox Code Playgroud)
他们是一样的吗?
==并且isEqualToString:永远不会相同.虽然==有时可能表现为检查字符串中的实际字符,但这完全是偶然的.LLVM编译器大大优化了字符串常量,但LLVM优化是一个实现细节,随时可能发生变化.
isEqualToString: - 比较字符串中的各个字符.
== - 直线指针比较.只有当两个NSString对象实际上是同一个确切内存位置的相同实例时,才会返回true .
编辑:#define在编译器运行之前评估语句(在预处理器中评估它们).#define语句执行直接搜索和替换,所以把相同的东西而不是a #define是完全相同的事情.
| 归档时间: |
|
| 查看次数: |
1453 次 |
| 最近记录: |