NSNumber文字

时间:2011-03-21 04:17:50

标签: objective-c literals nsnumber foundation

我是Objective-C的新手。我知道C和C ++,但Objective-C有相当的学习曲线。无论如何,是否有更短的方式(可能通过某种NSNumber文字,如果存在的话)写下以下内容:

[Tyler setArms:[[[NSNumber alloc] autorelease] initWithInt:1]];

5 个答案:

答案 0 :(得分:16)

Clang v3.1开始,您现在可以使用Objective-C文字。

NSNumber *fortyTwo = @42;             // equivalent to [NSNumber numberWithInt:42]
NSNumber *fortyTwoUnsigned = @42U;    // equivalent to [NSNumber numberWithUnsignedInt:42U]
NSNumber *fortyTwoLong = @42L;        // equivalent to [NSNumber numberWithLong:42L]
NSNumber *fortyTwoLongLong = @42LL;   // equivalent to [NSNumber numberWithLongLong:42LL]

所以,回答你的具体问题:

[Tyler setArms:[[[NSNumber alloc] autorelease] initWithInt:1]];

现在可以写成:

[Tyler setArms:@1];

还有数组和字典的文字,但它们超出了这个问题的范围。

要利用Xcode中的文字,您至少需要4.4版本(在撰写本文时,这只是预览版)。

注意:LLVM是一个开源项目,因此 none 受Apple的NDA约束。

答案 1 :(得分:6)

是的,只需使用许多辅助函数之一,例如numberWithInt:

[Tyler setArms:[NSNumber numberWithInt:1]];

表达式[NSNumber numberWithInt:1]相当于[[[NSNumber alloc] initWithInt:1] autorelease],相当于[[[NSNumber alloc] autorelease] initWithInt:1]。后一种表达非常罕见。

答案 2 :(得分:3)

您不必分配和初始化,NSNumber提供了一种方便的方法:

[Tyler setArms:[NSNumber numberWithInt:1]];

答案 3 :(得分:3)

在Xcode 4.4中,现在有NSNumber文字:

  // integral literals.
  NSNumber *fortyTwo = @42;             // equivalent to [NSNumber numberWithInt:42]
  NSNumber *fortyTwoUnsigned = @42U;    // equivalent to [NSNumber numberWithUnsignedInt:42U]
  NSNumber *fortyTwoLong = @42L;        // equivalent to [NSNumber numberWithLong:42L]
  NSNumber *fortyTwoLongLong = @42LL;   // equivalent to [NSNumber numberWithLongLong:42LL]

  // floating point literals.
  NSNumber *piFloat = @3.141592654F;    // equivalent to [NSNumber numberWithFloat:3.141592654F]
  NSNumber *piDouble = @3.1415926535;   // equivalent to [NSNumber numberWithDouble:3.1415926535]

  // BOOL literals.
  NSNumber *yesNumber = @YES;           // equivalent to [NSNumber numberWithBool:YES]
  NSNumber *noNumber = @NO;             // equivalent to [NSNumber numberWithBool:NO]

到目前为止,我见过的最好的文档都在llvm man page

答案 4 :(得分:2)

除了之前的回复之外还有两件事,都是正确的:

首先,如果您遵循Cocoa命名约定,我们将更容易提供帮助:变量(包括对象指针)应以小写字母开头。所以,'泰勒'代替'泰勒'。类和类型以大写字母开头。

其次,在初始化对象之前,您永远不会自动释放对象。总是首先分配,然后是init,然后做你需要做的任何事情,包括释放或自动释放。