@()在Objective-C中意味着什么?

Geo*_*rge 6 objective-c

例如,

CABasicAnimation *rotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
[rotate setToValue:@(M_PI)];
[rotate setDuration:0.1f];            
[[aView layer] addAnimation:rotate forKey:@"myRotationAnimation"];
Run Code Online (Sandbox Code Playgroud)

在哪里M_PI定义为宏math.h,

#define M_PI  3.14159265358979323846264338327950288   /* pi */
Run Code Online (Sandbox Code Playgroud)

Nay*_*yan 6

NeXT和Apple Obj-C运行时很长时间都包含一种使用文字语法创建新字符串的简短方法@"a new string".使用这种格式可以使程序员在执行某些操作时不必使用更长的initWithString或类似的方法.

当使用苹果LLVM编译器4.0或更高版本,数组,字典,和数字(NSArray,NSDictionary,NSNumber类)也可以使用文本语法,而不是方法创建.文字语法使用@与[],{},()组合的符号分别创建上述类.

所以,基本上这不仅对idNSNumber对象!

感谢wiki.


ily*_* n. 6

它是指向NSNumber对象的指针.它被称为盒装文字,因为心理图片是将表达式的原始值放入"盒子"中,即一个对象.

如有疑问,请参阅官方文档.请注意,指针可以是"真实" NSNumber对象,或者它(理论上,不知道这是否会在实践中起作用)是标记指针(参见,例如,我的问题).

请注意,你也可以做这样的事情@"string"@5,这将创造在编译时间常数.但是你需要括号来使用不是文字的东西,例如@(2 + 3).括号表单可用于任何表达式,甚至是编译器无法在编译时计算的表达式(尽管如果可以,它只会将表达式结果放入代码中).