Objective-C 中的“@TRUE”

"@TRUE" in Objective-C

最近看到这段代码:

WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
[configuration.preferences setValue:@TRUE forKey:@"xxxx"];

@TRUE 代表什么?我第一次看到这种结构。

我知道 YES 等于 true

@YES 等于 NSNumber nubmerWithBool,但是 @TRUE 代表什么?

Whosebug question wtih example using "@TRUE" construct

如果你预处理:

NSNumber *test = @TRUE;

结果是

NSNumber *test = @1;

[NSNumber numberWithInt:1] 的 clang 文字)。

这是合乎逻辑的,考虑到 TRUE 被预处理为 1

这可能更容易在以下位置看到:

#define MY_STRING "my_string"

NSString *string = @MY_STRING;

预处理为:

NSString *string = @"my_string";

它是一个 NSNumber 文字,一种从标量文字表达式创建 NSNumber 实例的方法。

来自The Clang 9 documentation

In Objective-C, any character, numeric or boolean literal prefixed with the '@' character will evaluate to a pointer to an NSNumber object initialized with that value. C’s type suffixes may be used to control the size of numeric literals.